Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
scapy
Manage
Activity
Members
Plan
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
CodeLinaro
public-release-test-restored
platform
external
scapy
Commits
2060322f
Commit
2060322f
authored
7 years ago
by
Pierre LALET
Browse files
Options
Downloads
Patches
Plain Diff
Python 3: fix IPsec
parent
8075633d
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
scapy/layers/ipsec.py
+15
-14
15 additions, 14 deletions
scapy/layers/ipsec.py
test/ipsec.uts
+376
-376
376 additions, 376 deletions
test/ipsec.uts
with
391 additions
and
390 deletions
scapy/layers/ipsec.py
+
15
−
14
View file @
2060322f
...
...
@@ -46,6 +46,7 @@ import socket
import
struct
from
scapy.config
import
conf
,
crypto_validator
from
scapy.compat
import
orb
,
raw
from
scapy.data
import
IP_PROTOS
from
scapy.compat
import
*
from
scapy.error
import
log_loading
...
...
@@ -153,7 +154,7 @@ class _ESPPlain(Packet):
]
def
data_for_encryption
(
self
):
return
str
(
self
.
data
)
+
self
.
padding
+
chr
(
self
.
padlen
)
+
chr
(
self
.
nh
)
return
raw
(
self
.
data
)
+
self
.
padding
+
struct
.
pack
(
"
BB
"
,
self
.
padlen
,
self
.
nh
)
#------------------------------------------------------------------------------
if
conf
.
crypto_valid
:
...
...
@@ -179,7 +180,7 @@ def _lcm(a, b):
if
a
==
0
or
b
==
0
:
return
0
else
:
return
abs
(
a
*
b
)
/
gcd
(
a
,
b
)
return
abs
(
a
*
b
)
/
/
gcd
(
a
,
b
)
class
CryptAlgo
(
object
):
"""
...
...
@@ -316,7 +317,7 @@ class CryptAlgo(object):
# Still according to the RFC, the default value for padding *MUST* be an
# array of bytes starting from 1 to padlen
# TODO: Handle padding function according to the encryption algo
esp
.
padding
=
''
.
join
(
chr
(
b
)
for
b
in
range
(
1
,
esp
.
padlen
+
1
))
esp
.
padding
=
struct
.
pack
(
"
B
"
*
esp
.
padlen
,
*
range
(
1
,
esp
.
padlen
+
1
))
# If the following test fails, it means that this algo does not comply
# with the RFC
...
...
@@ -390,8 +391,8 @@ class CryptAlgo(object):
raise
IPSecIntegrityError
(
err
)
# extract padlen and nh
padlen
=
or
d
(
data
[
-
2
])
nh
=
or
d
(
data
[
-
1
])
padlen
=
or
b
(
data
[
-
2
])
nh
=
or
b
(
data
[
-
1
])
# then use padlen to determine data and padding
data
=
data
[:
len
(
data
)
-
padlen
-
2
]
...
...
@@ -690,7 +691,7 @@ def zero_mutable_fields(pkt, sending=False):
"""
if
pkt
.
haslayer
(
AH
):
pkt
[
AH
].
icv
=
chr
(
0
)
*
len
(
pkt
[
AH
].
icv
)
pkt
[
AH
].
icv
=
b
"
\x00
"
*
len
(
pkt
[
AH
].
icv
)
else
:
raise
TypeError
(
'
no AH layer found
'
)
...
...
@@ -712,7 +713,7 @@ def zero_mutable_fields(pkt, sending=False):
if
opt
.
option
in
IMMUTABLE_IPV4_OPTIONS
:
immutable_opts
.
append
(
opt
)
else
:
immutable_opts
.
append
(
Raw
(
chr
(
0
)
*
len
(
opt
)))
immutable_opts
.
append
(
Raw
(
b
"
\x00
"
*
len
(
opt
)))
pkt
.
options
=
immutable_opts
else
:
...
...
@@ -732,7 +733,7 @@ def zero_mutable_fields(pkt, sending=False):
for
opt
in
next_hdr
.
options
:
if
opt
.
otype
&
0x20
:
# option data can change en-route and must be zeroed
opt
.
optdata
=
chr
(
0
)
*
opt
.
optlen
opt
.
optdata
=
b
"
\x00
"
*
opt
.
optlen
elif
isinstance
(
next_hdr
,
IPv6ExtHdrRouting
)
and
sending
:
# The sender must order the field so that it appears as it
# will at the receiver, prior to performing the ICV computation.
...
...
@@ -872,7 +873,7 @@ class SecurityAssociation(object):
if
ip_header
.
version
==
4
:
ip_header
.
len
=
len
(
ip_header
)
+
len
(
esp
)
del
ip_header
.
chksum
ip_header
=
ip_header
.
__class__
(
str
(
ip_header
))
ip_header
=
ip_header
.
__class__
(
raw
(
ip_header
))
else
:
ip_header
.
plen
=
len
(
ip_header
.
payload
)
+
len
(
esp
)
...
...
@@ -885,7 +886,7 @@ class SecurityAssociation(object):
def
_encrypt_ah
(
self
,
pkt
,
seq_num
=
None
):
ah
=
AH
(
spi
=
self
.
spi
,
seq
=
seq_num
or
self
.
seq_num
,
icv
=
chr
(
0
)
*
self
.
auth_algo
.
icv_size
)
icv
=
b
"
\x00
"
*
self
.
auth_algo
.
icv_size
)
if
self
.
tunnel_header
:
tunnel
=
self
.
tunnel_header
.
copy
()
...
...
@@ -898,7 +899,7 @@ class SecurityAssociation(object):
del
tunnel
.
nh
del
tunnel
.
plen
pkt
=
tunnel
.
__class__
(
str
(
tunnel
/
pkt
))
pkt
=
tunnel
.
__class__
(
raw
(
tunnel
/
pkt
))
ip_header
,
nh
,
payload
=
split_for_transport
(
pkt
,
socket
.
IPPROTO_AH
)
ah
.
nh
=
nh
...
...
@@ -906,16 +907,16 @@ class SecurityAssociation(object):
if
ip_header
.
version
==
6
and
len
(
ah
)
%
8
!=
0
:
# For IPv6, the total length of the header must be a multiple of
# 8-octet units.
ah
.
padding
=
chr
(
0
)
*
(
-
len
(
ah
)
%
8
)
ah
.
padding
=
b
"
\x00
"
*
(
-
len
(
ah
)
%
8
)
elif
len
(
ah
)
%
4
!=
0
:
# For IPv4, the total length of the header must be a multiple of
# 4-octet units.
ah
.
padding
=
chr
(
0
)
*
(
-
len
(
ah
)
%
4
)
ah
.
padding
=
b
"
\x00
"
*
(
-
len
(
ah
)
%
4
)
# RFC 4302 - Section 2.2. Payload Length
# This 8-bit field specifies the length of AH in 32-bit words (4-byte
# units), minus "2".
ah
.
payloadlen
=
len
(
ah
)
/
4
-
2
ah
.
payloadlen
=
len
(
ah
)
/
/
4
-
2
if
ip_header
.
version
==
4
:
ip_header
.
len
=
len
(
ip_header
)
+
len
(
ah
)
+
len
(
payload
)
...
...
This diff is collapsed.
Click to expand it.
test/ipsec.uts
+
376
−
376
View file @
2060322f
...
...
@@ -16,7 +16,7 @@ import socket
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
...
...
@@ -33,7 +33,7 @@ assert(e.proto == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -47,11 +47,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='DES', crypt_key='8bytekey',
crypt_algo='DES', crypt_key=
b
'8bytekey',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -66,7 +66,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -79,12 +79,12 @@ assert(d[TCP] == p[TCP])
# mode tunnel enc 'cbc(des)' '0x38627974656b6579' auth digest_null '' flag align4
ref = IP() \
/ ESP(spi=0x222,
data='\x0f\x6d\x2f\x3d\x1e\xc1\x0b\xc2\xb6\x8f\xfd\x67\x39\xc0\x96\x2c'
'\x17\x79\x88\xf6\xbc\x4d\xf7\x45\xd8\x36\x63\x86\xcd\x08\x7c\x08'
'\x2b\xf8\xa2\x91\x18\x21\x88\xd9\x26\x00\xc5\x21\x24\xbf\x8f\xf5'
'\x6c\x47\xb0\x3a\x8e\xdb\x75\x21\xd9\x33\x85\x5a\x15\xc6\x31\x00'
'\x1c\xef\x3e\x12\xce\x70\xec\x8f\x48\xc7\x81\x9b\x66\xcb\xf5\x39'
'\x91\xb3\x8e\x72\xfb\x7f\x64\x65\x6c\xf4\xa9\xf2\x5e\x63\x2f\x60',
data=
b
'\x0f\x6d\x2f\x3d\x1e\xc1\x0b\xc2\xb6\x8f\xfd\x67\x39\xc0\x96\x2c'
b
'\x17\x79\x88\xf6\xbc\x4d\xf7\x45\xd8\x36\x63\x86\xcd\x08\x7c\x08'
b
'\x2b\xf8\xa2\x91\x18\x21\x88\xd9\x26\x00\xc5\x21\x24\xbf\x8f\xf5'
b
'\x6c\x47\xb0\x3a\x8e\xdb\x75\x21\xd9\x33\x85\x5a\x15\xc6\x31\x00'
b
'\x1c\xef\x3e\x12\xce\x70\xec\x8f\x48\xc7\x81\x9b\x66\xcb\xf5\x39'
b
'\x91\xb3\x8e\x72\xfb\x7f\x64\x65\x6c\xf4\xa9\xf2\x5e\x63\x2f\x60',
seq=1)
d_ref = sa.decrypt(ref)
...
...
@@ -99,11 +99,11 @@ assert(d_ref.haslayer(ICMP))
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='3DES', crypt_key='threedifferent8byteskeys',
crypt_algo='3DES', crypt_key=
b
'threedifferent8byteskeys',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -118,7 +118,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -131,12 +131,12 @@ assert(d[TCP] == p[TCP])
# mode tunnel enc 'cbc(des3_ede)' '0x7468726565646966666572656e743862797465736b657973' auth digest_null '' flag align4
ref = IP() \
/ ESP(spi=0x222,
data='\x36\x5c\x9b\x41\x37\xc8\x59\x1e\x39\x63\xe8\x6b\xf7\x0d\x97\x54'
'\x13\x84\xf6\x81\x66\x19\xe7\xcb\x75\x94\xf1\x0b\x8e\xa3\xf1\xa0'
'\x3e\x88\x51\xc4\x50\xd0\xa9\x1f\x16\x25\xc6\xbd\xe9\x0b\xdc\xae'
'\xf8\x13\x00\xa3\x8c\x53\xee\x1c\x96\xc0\xfe\x99\x70\xab\x94\x77'
'\xd7\xc4\xe8\xfd\x9f\x96\x28\xb8\x95\x20\x86\x7b\x19\xbc\x8f\xf5'
'\x96\xb0\x7e\xcc\x04\x83\xae\x4d\xa3\xba\x1d\x44\xf0\xba\x2e\xcd',
data=
b
'\x36\x5c\x9b\x41\x37\xc8\x59\x1e\x39\x63\xe8\x6b\xf7\x0d\x97\x54'
b
'\x13\x84\xf6\x81\x66\x19\xe7\xcb\x75\x94\xf1\x0b\x8e\xa3\xf1\xa0'
b
'\x3e\x88\x51\xc4\x50\xd0\xa9\x1f\x16\x25\xc6\xbd\xe9\x0b\xdc\xae'
b
'\xf8\x13\x00\xa3\x8c\x53\xee\x1c\x96\xc0\xfe\x99\x70\xab\x94\x77'
b
'\xd7\xc4\xe8\xfd\x9f\x96\x28\xb8\x95\x20\x86\x7b\x19\xbc\x8f\xf5'
b
'\x96\xb0\x7e\xcc\x04\x83\xae\x4d\xa3\xba\x1d\x44\xf0\xba\x2e\xcd',
seq=1)
d_ref = sa.decrypt(ref)
...
...
@@ -151,11 +151,11 @@ assert(d_ref.haslayer(ICMP))
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -169,7 +169,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -182,13 +182,13 @@ assert(d[TCP] == p[TCP])
# mode tunnel enc 'cbc(aes)' '0x7369787465656e6279746573206b6579' auth digest_null '' flag align4
ref = IP() \
/ ESP(spi=0x222,
data='\x08\x2f\x94\xe6\x53\xd8\x8e\x13\x70\xe8\xff\x61\x52\x90\x27\x3c'
'\xf2\xb4\x1f\x75\xd2\xa0\xac\xae\x1c\xa8\x5e\x1c\x78\x21\x4c\x7f'
'\xc3\x30\x17\x6a\x8d\xf3\xb1\xa7\xd1\xa8\x42\x01\xd6\x8d\x2d\x7e'
'\x5d\x06\xdf\xaa\x05\x27\x42\xb1\x00\x12\xcf\xff\x64\x02\x5a\x40'
'\xcd\xca\x1b\x91\xba\xf8\xc8\x59\xe7\xbd\x4d\x19\xb4\x8d\x39\x25'
'\x6c\x73\xf1\x2d\xaa\xee\xe1\x0b\x71\xcd\xfc\x11\x1d\x56\xce\x60'
'\xed\xd2\x32\x87\xd4\x90\xc3\xf5\x31\x47\x97\x69\x83\x82\x6d\x38',
data=
b
'\x08\x2f\x94\xe6\x53\xd8\x8e\x13\x70\xe8\xff\x61\x52\x90\x27\x3c'
b
'\xf2\xb4\x1f\x75\xd2\xa0\xac\xae\x1c\xa8\x5e\x1c\x78\x21\x4c\x7f'
b
'\xc3\x30\x17\x6a\x8d\xf3\xb1\xa7\xd1\xa8\x42\x01\xd6\x8d\x2d\x7e'
b
'\x5d\x06\xdf\xaa\x05\x27\x42\xb1\x00\x12\xcf\xff\x64\x02\x5a\x40'
b
'\xcd\xca\x1b\x91\xba\xf8\xc8\x59\xe7\xbd\x4d\x19\xb4\x8d\x39\x25'
b
'\x6c\x73\xf1\x2d\xaa\xee\xe1\x0b\x71\xcd\xfc\x11\x1d\x56\xce\x60'
b
'\xed\xd2\x32\x87\xd4\x90\xc3\xf5\x31\x47\x97\x69\x83\x82\x6d\x38',
seq=1)
d_ref = sa.decrypt(ref)
...
...
@@ -203,11 +203,11 @@ assert(d_ref.haslayer(ICMP))
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CTR', crypt_key='16bytekey+4bytenonce',
crypt_algo='AES-CTR', crypt_key=
b
'16bytekey+4bytenonce',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -221,7 +221,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -234,12 +234,12 @@ assert(d[TCP] == p[TCP])
# mode tunnel enc 'rfc3686(ctr(aes))' '0x3136627974656b65792b34627974656e6f6e6365' auth digest_null '' flag align4
ref = IP() \
/ ESP(spi=0x222,
data='\xc4\xca\x09\x0f\x8b\xd3\x05\x3d\xac\x5a\x2f\x87\xca\x71\x10\x01'
'\xa7\x95\xc9\x07\xcc\xd4\x05\x58\x65\x23\x22\x4b\x63\x9b\x1f\xef'
'\x55\xb9\x1a\x91\x52\x76\x00\xf7\x94\x7b\x1d\xe1\x8e\x03\x2e\x85'
'\xad\xdd\x83\x22\x8a\xc3\x88\x6e\x85\xf5\x9b\xed\xa9\x6e\xb1\xc3'
'\x78\x00\x2f\xcd\x77\xe8\x3e\xec\x0e\x77\x94\xb2\x9b\x0f\x64\x5e'
'\x09\x83\x03\x7d\x83\x22\x39\xbb\x94\x66\xae\x9f\xbf\x01\xda\xfb',
data=
b
'\xc4\xca\x09\x0f\x8b\xd3\x05\x3d\xac\x5a\x2f\x87\xca\x71\x10\x01'
b
'\xa7\x95\xc9\x07\xcc\xd4\x05\x58\x65\x23\x22\x4b\x63\x9b\x1f\xef'
b
'\x55\xb9\x1a\x91\x52\x76\x00\xf7\x94\x7b\x1d\xe1\x8e\x03\x2e\x85'
b
'\xad\xdd\x83\x22\x8a\xc3\x88\x6e\x85\xf5\x9b\xed\xa9\x6e\xb1\xc3'
b
'\x78\x00\x2f\xcd\x77\xe8\x3e\xec\x0e\x77\x94\xb2\x9b\x0f\x64\x5e'
b
'\x09\x83\x03\x7d\x83\x22\x39\xbb\x94\x66\xae\x9f\xbf\x01\xda\xfb',
seq=1)
d_ref = sa.decrypt(ref)
...
...
@@ -254,11 +254,11 @@ assert(d_ref.haslayer(ICMP))
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='Blowfish', crypt_key='sixteenbytes key',
crypt_algo='Blowfish', crypt_key=
b
'sixteenbytes key',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -272,7 +272,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -285,12 +285,12 @@ assert(d[TCP] == p[TCP])
# mode tunnel enc 'cbc(blowfish)' '0x7369787465656e6279746573206b6579' auth digest_null '' flag align4
ref = IP() \
/ ESP(spi=0x222,
data='\x93\x9f\x5a\x10\x55\x57\x30\xa0\xb4\x00\x72\x1e\x46\x42\x46\x20'
'\xbc\x01\xef\xc3\x79\xcc\x3e\x55\x64\xba\x09\xc2\x6a\x5a\x5c\xb3'
'\xcc\xb5\xd5\x87\x82\xb0\x0a\x94\x58\xfc\x50\x37\x40\xe1\x03\xd3'
'\x4a\x09\xb2\x23\x53\x56\xa4\x45\x4c\xbb\x81\x1c\xdb\x31\xa7\x67'
'\xbd\x38\x8e\xba\x55\xd9\x1f\xf1\x3c\xeb\x07\x4c\x02\xb0\x3e\xc5'
'\xf6\x60\xdd\x68\xe1\xd4\xec\xee\x27\xc0\x6d\x1a\x80\xe2\xcc\x7d',
data=
b
'\x93\x9f\x5a\x10\x55\x57\x30\xa0\xb4\x00\x72\x1e\x46\x42\x46\x20'
b
'\xbc\x01\xef\xc3\x79\xcc\x3e\x55\x64\xba\x09\xc2\x6a\x5a\x5c\xb3'
b
'\xcc\xb5\xd5\x87\x82\xb0\x0a\x94\x58\xfc\x50\x37\x40\xe1\x03\xd3'
b
'\x4a\x09\xb2\x23\x53\x56\xa4\x45\x4c\xbb\x81\x1c\xdb\x31\xa7\x67'
b
'\xbd\x38\x8e\xba\x55\xd9\x1f\xf1\x3c\xeb\x07\x4c\x02\xb0\x3e\xc5'
b
'\xf6\x60\xdd\x68\xe1\xd4\xec\xee\x27\xc0\x6d\x1a\x80\xe2\xcc\x7d',
seq=1)
d_ref = sa.decrypt(ref)
...
...
@@ -305,11 +305,11 @@ assert(d_ref.haslayer(ICMP))
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='CAST', crypt_key='sixteenbytes key',
crypt_algo='CAST', crypt_key=
b
'sixteenbytes key',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -323,7 +323,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -336,12 +336,12 @@ assert(d[TCP] == p[TCP])
# mode tunnel enc 'cbc(cast5)' '0x7369787465656e6279746573206b6579' auth digest_null '' flag align4
ref = IP() \
/ ESP(spi=0x222,
data='\xcd\x4a\x46\x05\x51\x54\x73\x35\x1d\xad\x4b\x10\xc1\x15\xe2\x70'
'\xbc\x9c\x53\x8f\x4d\x1c\x87\x1a\xc1\xb0\xdf\x80\xd1\x0c\xa4\x59'
'\xe6\x50\xde\x46\xdb\x3f\x28\xc2\xda\x6c\x2b\x81\x5e\x7c\x7b\x4f'
'\xbc\x8d\xc1\x6d\x4a\x2b\x04\x91\x9e\xc4\x0b\xba\x05\xba\x3b\x71'
'\xac\xe3\x16\xcf\x7f\x00\xc5\x87\x7d\x72\x48\xe6\x5b\x43\x19\x24'
'\xae\xa6\x2c\xcc\xad\xbf\x37\x6c\x6e\xea\x71\x67\x73\xd6\x11\x9f',
data=
b
'\xcd\x4a\x46\x05\x51\x54\x73\x35\x1d\xad\x4b\x10\xc1\x15\xe2\x70'
b
'\xbc\x9c\x53\x8f\x4d\x1c\x87\x1a\xc1\xb0\xdf\x80\xd1\x0c\xa4\x59'
b
'\xe6\x50\xde\x46\xdb\x3f\x28\xc2\xda\x6c\x2b\x81\x5e\x7c\x7b\x4f'
b
'\xbc\x8d\xc1\x6d\x4a\x2b\x04\x91\x9e\xc4\x0b\xba\x05\xba\x3b\x71'
b
'\xac\xe3\x16\xcf\x7f\x00\xc5\x87\x7d\x72\x48\xe6\x5b\x43\x19\x24'
b
'\xae\xa6\x2c\xcc\xad\xbf\x37\x6c\x6e\xea\x71\x67\x73\xd6\x11\x9f',
seq=1)
d_ref = sa.decrypt(ref)
...
...
@@ -360,7 +360,7 @@ assert(d_ref.haslayer(ICMP))
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
...
...
@@ -379,7 +379,7 @@ assert(e.proto == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -393,11 +393,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='DES', crypt_key='8bytekey',
crypt_algo='DES', crypt_key=
b
'8bytekey',
auth_algo='NULL', auth_key=None,
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
...
...
@@ -414,7 +414,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -428,11 +428,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='3DES', crypt_key='threedifferent8byteskeys',
crypt_algo='3DES', crypt_key=
b
'threedifferent8byteskeys',
auth_algo='NULL', auth_key=None,
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
...
...
@@ -449,7 +449,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -463,11 +463,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='NULL', auth_key=None,
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
...
...
@@ -483,7 +483,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -497,11 +497,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CTR', crypt_key='16bytekey+4bytenonce',
crypt_algo='AES-CTR', crypt_key=
b
'16bytekey+4bytenonce',
auth_algo='NULL', auth_key=None,
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
...
...
@@ -517,7 +517,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -531,11 +531,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='Blowfish', crypt_key='sixteenbytes key',
crypt_algo='Blowfish', crypt_key=
b
'sixteenbytes key',
auth_algo='NULL', auth_key=None,
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
...
...
@@ -551,7 +551,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -565,11 +565,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='CAST', crypt_key='sixteenbytes key',
crypt_algo='CAST', crypt_key=
b
'sixteenbytes key',
auth_algo='NULL', auth_key=None,
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
...
...
@@ -585,7 +585,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -602,12 +602,12 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-SHA1-96', auth_key='secret key')
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -619,7 +619,7 @@ assert(e.proto == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -633,12 +633,12 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-SHA1-96', auth_key='secret key')
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -650,7 +650,7 @@ assert(e.proto == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -659,7 +659,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -668,12 +668,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-256-128', auth_key='secret key')
auth_algo='SHA2-256-128', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -686,7 +686,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -700,12 +700,12 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-256-128', auth_key='secret key')
auth_algo='SHA2-256-128', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -718,7 +718,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -727,7 +727,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -736,12 +736,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-384-192', auth_key='secret key')
auth_algo='SHA2-384-192', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -754,7 +754,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -768,12 +768,12 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-384-192', auth_key='secret key')
auth_algo='SHA2-384-192', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -786,7 +786,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -795,7 +795,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -804,12 +804,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-512-256', auth_key='secret key')
auth_algo='SHA2-512-256', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -822,7 +822,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -836,12 +836,12 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-512-256', auth_key='secret key')
auth_algo='SHA2-512-256', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -854,7 +854,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -863,7 +863,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -872,12 +872,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-MD5-96', auth_key='secret key')
auth_algo='HMAC-MD5-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -890,7 +890,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -904,12 +904,12 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-MD5-96', auth_key='secret key')
auth_algo='HMAC-MD5-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -922,7 +922,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -931,7 +931,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -940,12 +940,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='AES-CMAC-96', auth_key='sixteenbytes key')
auth_algo='AES-CMAC-96', auth_key=
b
'sixteenbytes key')
e = sa.encrypt(p)
e
...
...
@@ -958,7 +958,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -972,12 +972,12 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='AES-CMAC-96', auth_key='sixteenbytes key')
auth_algo='AES-CMAC-96', auth_key=
b
'sixteenbytes key')
e = sa.encrypt(p)
e
...
...
@@ -990,7 +990,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -999,7 +999,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
###############################################################################
...
...
@@ -1011,12 +1011,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-SHA1-96', auth_key='secret key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1030,7 +1030,7 @@ assert(e.proto == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -1044,12 +1044,12 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-SHA1-96', auth_key='secret key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1063,7 +1063,7 @@ assert(e.proto == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -1072,7 +1072,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -1081,12 +1081,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-256-128', auth_key='secret key',
auth_algo='SHA2-256-128', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1101,7 +1101,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -1115,12 +1115,12 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-256-128', auth_key='secret key',
auth_algo='SHA2-256-128', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1135,7 +1135,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -1144,7 +1144,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -1153,12 +1153,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-384-192', auth_key='secret key',
auth_algo='SHA2-384-192', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1173,7 +1173,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -1187,12 +1187,12 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-384-192', auth_key='secret key',
auth_algo='SHA2-384-192', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1207,7 +1207,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -1216,7 +1216,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -1225,12 +1225,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-512-256', auth_key='secret key',
auth_algo='SHA2-512-256', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1245,7 +1245,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -1259,12 +1259,12 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='SHA2-512-256', auth_key='secret key',
auth_algo='SHA2-512-256', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1279,7 +1279,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -1288,7 +1288,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -1297,12 +1297,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-MD5-96', auth_key='secret key',
auth_algo='HMAC-MD5-96', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1317,7 +1317,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -1331,12 +1331,12 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-MD5-96', auth_key='secret key',
auth_algo='HMAC-MD5-96', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1351,7 +1351,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -1360,7 +1360,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -1369,12 +1369,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='AES-CMAC-96', auth_key='sixteenbytes key',
auth_algo='AES-CMAC-96', auth_key=
b
'sixteenbytes key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1389,7 +1389,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -1403,12 +1403,12 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='AES-CMAC-96', auth_key='sixteenbytes key',
auth_algo='AES-CMAC-96', auth_key=
b
'sixteenbytes key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1423,7 +1423,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should be readable
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -1432,7 +1432,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
###############################################################################
...
...
@@ -1444,12 +1444,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key='secret key')
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -1462,7 +1462,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -1476,12 +1476,12 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key='secret key')
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -1494,7 +1494,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -1503,7 +1503,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -1512,11 +1512,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-GCM', crypt_key='16bytekey+4bytenonce',
crypt_algo='AES-GCM', crypt_key=
b
'16bytekey+4bytenonce',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -1530,7 +1530,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -1543,13 +1543,13 @@ assert(d[TCP] == p[TCP])
# mode tunnel aead 'rfc4106(gcm(aes))' '0x3136627974656b65792b34627974656e6f6e6365' 128 flag align4
ref = IP() \
/ ESP(spi=0x222,
data='\x66\x00\x28\x86\xe9\xdf\xc5\x24\xb0\xbd\xfd\x62\x61\x7e\xd3\x76'
'\x7b\x48\x28\x8e\x76\xaa\xea\x48\xb8\x40\x30\x8a\xce\x50\x71\xbb'
'\xc0\xb2\x47\x71\xd7\xa4\xa0\xcb\x03\x68\xd3\x16\x5a\x7c\x37\x84'
'\x87\xc7\x19\x59\xb4\x7c\x76\xe3\x48\xc0\x90\x4b\xd2\x36\x95\xc1'
'\xb7\xa4\xb6\x7b\x89\xe6\x4f\x10\xae\xdb\x84\x47\x46\x00\xb4\x44'
'\xe6\x6d\x16\x55\x5f\x82\x36\xa5\x49\xf7\x52\x81\x65\x90\x4d\x28'
'\x92\xb2\xe3\xf1\xa4\x02\xd2\x37\xac\x0b\x7a\x10\xcf\x64\x46\xb9',
data=
b
'\x66\x00\x28\x86\xe9\xdf\xc5\x24\xb0\xbd\xfd\x62\x61\x7e\xd3\x76'
b
'\x7b\x48\x28\x8e\x76\xaa\xea\x48\xb8\x40\x30\x8a\xce\x50\x71\xbb'
b
'\xc0\xb2\x47\x71\xd7\xa4\xa0\xcb\x03\x68\xd3\x16\x5a\x7c\x37\x84'
b
'\x87\xc7\x19\x59\xb4\x7c\x76\xe3\x48\xc0\x90\x4b\xd2\x36\x95\xc1'
b
'\xb7\xa4\xb6\x7b\x89\xe6\x4f\x10\xae\xdb\x84\x47\x46\x00\xb4\x44'
b
'\xe6\x6d\x16\x55\x5f\x82\x36\xa5\x49\xf7\x52\x81\x65\x90\x4d\x28'
b
'\x92\xb2\xe3\xf1\xa4\x02\xd2\x37\xac\x0b\x7a\x10\xcf\x64\x46\xb9',
seq=1)
d_ref = sa.decrypt(ref)
...
...
@@ -1564,11 +1564,11 @@ assert(d_ref.haslayer(ICMP))
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-GCM', crypt_key='16bytekey+4bytenonce',
crypt_algo='AES-GCM', crypt_key=
b
'16bytekey+4bytenonce',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -1582,7 +1582,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -1591,7 +1591,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -1601,11 +1601,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CCM', crypt_key='16bytekey3bytenonce',
crypt_algo='AES-CCM', crypt_key=
b
'16bytekey3bytenonce',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -1620,7 +1620,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -1633,13 +1633,13 @@ assert(d == p)
# mode tunnel aead 'rfc4309(ccm(aes))' '0x3136627974656b657933627974656e6f6e6365' 64
ref = IP() \
/ ESP(spi=0x222,
data='\x2e\x02\x9f\x1f\xad\x76\x80\x58\x8f\xeb\x45\xf1\x66\xe3\xad\xa6'
'\x90\x1b\x2b\x7d\xd3\x3d\xa4\x53\x35\xc8\xfa\x92\xfd\xd7\x42\x2f'
'\x87\x60\x9b\x46\xb0\x21\x5e\x82\xfb\x2f\x59\xba\xf0\x6c\xe5\x51'
'\xb8\x36\x20\x88\xfe\x49\x86\x60\xe8\x0a\x3d\x36\xb5\x8a\x08\xa9'
'\x5e\xe3\x87\xfa\x93\x3f\xe8\xc2\xc5\xbf\xb1\x2e\x6f\x7d\xc5\xa5'
'\xd8\xe5\xf3\x25\x21\x81\x43\x16\x48\x10\x7c\x04\x31\x20\x07\x7c'
'\x7b\xda\x5d\x1a\x72\x45\xc4\x79',
data=
b
'\x2e\x02\x9f\x1f\xad\x76\x80\x58\x8f\xeb\x45\xf1\x66\xe3\xad\xa6'
b
'\x90\x1b\x2b\x7d\xd3\x3d\xa4\x53\x35\xc8\xfa\x92\xfd\xd7\x42\x2f'
b
'\x87\x60\x9b\x46\xb0\x21\x5e\x82\xfb\x2f\x59\xba\xf0\x6c\xe5\x51'
b
'\xb8\x36\x20\x88\xfe\x49\x86\x60\xe8\x0a\x3d\x36\xb5\x8a\x08\xa9'
b
'\x5e\xe3\x87\xfa\x93\x3f\xe8\xc2\xc5\xbf\xb1\x2e\x6f\x7d\xc5\xa5'
b
'\xd8\xe5\xf3\x25\x21\x81\x43\x16\x48\x10\x7c\x04\x31\x20\x07\x7c'
b
'\x7b\xda\x5d\x1a\x72\x45\xc4\x79',
seq=1)
d_ref = sa.decrypt(ref)
...
...
@@ -1655,11 +1655,11 @@ assert(d_ref.haslayer(ICMP))
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CCM', crypt_key='16bytekey3bytenonce',
crypt_algo='AES-CCM', crypt_key=
b
'16bytekey3bytenonce',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -1674,7 +1674,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -1683,7 +1683,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -1692,12 +1692,12 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key='secret key',
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1712,7 +1712,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -1726,12 +1726,12 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key='secret key',
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -1746,7 +1746,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -1755,7 +1755,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -1764,11 +1764,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-GCM', crypt_key='16bytekey+4bytenonce',
crypt_algo='AES-GCM', crypt_key=
b
'16bytekey+4bytenonce',
auth_algo='NULL', auth_key=None,
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
...
...
@@ -1784,7 +1784,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -1798,11 +1798,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-GCM', crypt_key='16bytekey+4bytenonce',
crypt_algo='AES-GCM', crypt_key=
b
'16bytekey+4bytenonce',
auth_algo='NULL', auth_key=None,
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
...
...
@@ -1818,7 +1818,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -1827,7 +1827,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -1837,11 +1837,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CCM', crypt_key='16bytekey3bytenonce',
crypt_algo='AES-CCM', crypt_key=
b
'16bytekey3bytenonce',
auth_algo='NULL', auth_key=None,
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
...
...
@@ -1857,7 +1857,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -1872,11 +1872,11 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CCM', crypt_key='16bytekey3bytenonce',
crypt_algo='AES-CCM', crypt_key=
b
'16bytekey3bytenonce',
auth_algo='NULL', auth_key=None,
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
...
...
@@ -1892,7 +1892,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -1901,7 +1901,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
###############################################################################
...
...
@@ -1913,11 +1913,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-SHA1-96', auth_key='sixteenbytes key')
auth_algo='HMAC-SHA1-96', auth_key=
b
'sixteenbytes key')
e = sa.encrypt(p)
e
...
...
@@ -1947,11 +1947,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-SHA1-96', auth_key='sixteenbytes key')
auth_algo='HMAC-SHA1-96', auth_key=
b
'sixteenbytes key')
e = sa.encrypt(p)
e
...
...
@@ -1972,7 +1972,7 @@ e[TCP].sport = 5
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -1981,11 +1981,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-256-128', auth_key='secret key')
auth_algo='SHA2-256-128', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2015,11 +2015,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-256-128', auth_key='secret key')
auth_algo='SHA2-256-128', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2040,7 +2040,7 @@ e[TCP].dport = 46
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2049,11 +2049,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-384-192', auth_key='secret key')
auth_algo='SHA2-384-192', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2083,11 +2083,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-384-192', auth_key='secret key')
auth_algo='SHA2-384-192', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2108,7 +2108,7 @@ e[TCP].dport = 46
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2117,11 +2117,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-512-256', auth_key='secret key')
auth_algo='SHA2-512-256', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2151,11 +2151,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-512-256', auth_key='secret key')
auth_algo='SHA2-512-256', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2176,7 +2176,7 @@ e[TCP].dport = 46
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2185,11 +2185,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-MD5-96', auth_key='secret key')
auth_algo='HMAC-MD5-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2219,11 +2219,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-MD5-96', auth_key='secret key')
auth_algo='HMAC-MD5-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2244,7 +2244,7 @@ e[TCP].dport = 46
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2253,11 +2253,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='AES-CMAC-96', auth_key='sixteenbytes key')
auth_algo='AES-CMAC-96', auth_key=
b
'sixteenbytes key')
e = sa.encrypt(p)
e
...
...
@@ -2287,11 +2287,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='AES-CMAC-96', auth_key='sixteenbytes key')
auth_algo='AES-CMAC-96', auth_key=
b
'sixteenbytes key')
e = sa.encrypt(p)
e
...
...
@@ -2312,7 +2312,7 @@ e[TCP].dport = 46
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
###############################################################################
...
...
@@ -2324,11 +2324,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-SHA1-96', auth_key='secret key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2358,11 +2358,11 @@ assert(d[TCP] == p[TCP])
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-SHA1-96', auth_key='secret key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2383,7 +2383,7 @@ e.dst = '4.4.4.4'
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2392,11 +2392,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-256-128', auth_key='secret key',
auth_algo='SHA2-256-128', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2426,11 +2426,11 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-256-128', auth_key='secret key',
auth_algo='SHA2-256-128', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2451,7 +2451,7 @@ e.dst = '4.4.4.4'
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2460,11 +2460,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-384-192', auth_key='secret key',
auth_algo='SHA2-384-192', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2494,11 +2494,11 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-384-192', auth_key='secret key',
auth_algo='SHA2-384-192', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2519,7 +2519,7 @@ e.dst = '4.4.4.4'
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2528,11 +2528,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-512-256', auth_key='secret key',
auth_algo='SHA2-512-256', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2562,11 +2562,11 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-512-256', auth_key='secret key',
auth_algo='SHA2-512-256', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2587,7 +2587,7 @@ e.dst = '4.4.4.4'
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2596,11 +2596,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-MD5-96', auth_key='secret key',
auth_algo='HMAC-MD5-96', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2630,11 +2630,11 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-MD5-96', auth_key='secret key',
auth_algo='HMAC-MD5-96', auth_key=
b
'secret key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2655,7 +2655,7 @@ e.dst = '4.4.4.4'
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2664,11 +2664,11 @@ except IPSecIntegrityError, err:
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='AES-CMAC-96', auth_key='sixteenbytes key',
auth_algo='AES-CMAC-96', auth_key=
b
'sixteenbytes key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2698,11 +2698,11 @@ assert(d == p)
p = IP(src='1.1.1.1', dst='2.2.2.2')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IP(
str
(p))
p = IP(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='AES-CMAC-96', auth_key='sixteenbytes key',
auth_algo='AES-CMAC-96', auth_key=
b
'sixteenbytes key',
tunnel_header=IP(src='11.11.11.11', dst='22.22.22.22'))
e = sa.encrypt(p)
...
...
@@ -2723,7 +2723,7 @@ e.dst = '4.4.4.4'
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
###############################################################################
...
...
@@ -2736,7 +2736,7 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
...
...
@@ -2752,7 +2752,7 @@ assert(e.nh == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -2766,11 +2766,11 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -2783,7 +2783,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -2797,12 +2797,12 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-SHA1-96', auth_key='secret key')
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2813,7 +2813,7 @@ assert(e.nh == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -2827,12 +2827,12 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-SHA1-96', auth_key='secret key')
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2843,16 +2843,16 @@ assert(e.nh == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace('\x01', '\x21')
e[ESP].data = e[ESP].data.replace(
b
'\x01',
b
'\x21')
* integrity verification should fail
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2861,12 +2861,12 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key='secret key')
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2878,7 +2878,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -2892,12 +2892,12 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key='secret key')
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -2909,7 +2909,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -2918,7 +2918,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2927,11 +2927,11 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-GCM', crypt_key='16bytekey+4bytenonce',
crypt_algo='AES-GCM', crypt_key=
b
'16bytekey+4bytenonce',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -2944,7 +2944,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -2958,11 +2958,11 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-GCM', crypt_key='16bytekey+4bytenonce',
crypt_algo='AES-GCM', crypt_key=
b
'16bytekey+4bytenonce',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -2975,7 +2975,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -2984,7 +2984,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -2994,11 +2994,11 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CCM', crypt_key='16bytekey3bytenonce',
crypt_algo='AES-CCM', crypt_key=
b
'16bytekey3bytenonce',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -3011,7 +3011,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -3026,11 +3026,11 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CCM', crypt_key='16bytekey3bytenonce',
crypt_algo='AES-CCM', crypt_key=
b
'16bytekey3bytenonce',
auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)
...
...
@@ -3043,7 +3043,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -3052,7 +3052,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -3062,7 +3062,7 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
...
...
@@ -3080,7 +3080,7 @@ assert(e.nh == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -3094,11 +3094,11 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='NULL', auth_key=None,
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
...
...
@@ -3113,7 +3113,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -3127,12 +3127,12 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-SHA1-96', auth_key='secret key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
e = sa.encrypt(p)
...
...
@@ -3145,7 +3145,7 @@ assert(e.nh == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* integrity verification should pass
d = sa.decrypt(e)
...
...
@@ -3159,12 +3159,12 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='NULL', crypt_key=None,
auth_algo='HMAC-SHA1-96', auth_key='secret key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
e = sa.encrypt(p)
...
...
@@ -3177,7 +3177,7 @@ assert(e.nh == socket.IPPROTO_ESP)
assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
assert('testdata' in e[ESP].data)
assert(
b
'testdata' in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
...
...
@@ -3186,7 +3186,7 @@ e[ESP].data = e[ESP].data.replace(b'\x01', b'\x21')
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -3195,12 +3195,12 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key='secret key',
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
e = sa.encrypt(p)
...
...
@@ -3214,7 +3214,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -3228,12 +3228,12 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CBC', crypt_key='sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key='secret key',
crypt_algo='AES-CBC', crypt_key=
b
'sixteenbytes key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
e = sa.encrypt(p)
...
...
@@ -3247,7 +3247,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -3256,7 +3256,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -3265,11 +3265,11 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-GCM', crypt_key='16bytekey+4bytenonce',
crypt_algo='AES-GCM', crypt_key=
b
'16bytekey+4bytenonce',
auth_algo='NULL', auth_key=None,
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
...
...
@@ -3284,7 +3284,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -3298,11 +3298,11 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-GCM', crypt_key='16bytekey+4bytenonce',
crypt_algo='AES-GCM', crypt_key=
b
'16bytekey+4bytenonce',
auth_algo='NULL', auth_key=None,
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
...
...
@@ -3317,7 +3317,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -3326,7 +3326,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -3336,11 +3336,11 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CCM', crypt_key='16bytekey3bytenonce',
crypt_algo='AES-CCM', crypt_key=
b
'16bytekey3bytenonce',
auth_algo='NULL', auth_key=None,
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
...
...
@@ -3354,7 +3354,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
d = sa.decrypt(e)
d
...
...
@@ -3369,11 +3369,11 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(ESP, spi=0x222,
crypt_algo='AES-CCM', crypt_key='16bytekey3bytenonce',
crypt_algo='AES-CCM', crypt_key=
b
'16bytekey3bytenonce',
auth_algo='NULL', auth_key=None,
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
...
...
@@ -3387,7 +3387,7 @@ assert(e.haslayer(ESP))
assert(not e.haslayer(TCP))
assert(e[ESP].spi == sa.spi)
* after encryption the original packet payload should NOT be readable
assert('testdata' not in e[ESP].data)
assert(
b
'testdata' not in e[ESP].data)
* simulate the alteration of the packet before decryption
e[ESP].seq += 1
...
...
@@ -3396,7 +3396,7 @@ e[ESP].seq += 1
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -3409,11 +3409,11 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-SHA1-96', auth_key='secret key')
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -3442,11 +3442,11 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-SHA1-96', auth_key='secret key')
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -3466,7 +3466,7 @@ e[TCP].dport = 46
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -3475,11 +3475,11 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-256-128', auth_key='secret key')
auth_algo='SHA2-256-128', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -3508,11 +3508,11 @@ assert(d[TCP] == p[TCP])
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-256-128', auth_key='secret key')
auth_algo='SHA2-256-128', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -3532,7 +3532,7 @@ e[TCP].dport = 46
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -3541,11 +3541,11 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-SHA1-96', auth_key='secret key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
e = sa.encrypt(p)
...
...
@@ -3575,11 +3575,11 @@ assert(d == p)
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-SHA1-96', auth_key='secret key',
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key',
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
e = sa.encrypt(p)
...
...
@@ -3600,7 +3600,7 @@ e.src = 'cc::ee'
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
#######################################
...
...
@@ -3609,11 +3609,11 @@ except IPSecIntegrityError, err:
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-256-128', auth_key='secret key',
auth_algo='SHA2-256-128', auth_key=
b
'secret key',
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
e = sa.encrypt(p)
...
...
@@ -3643,11 +3643,11 @@ assert(d == p)
p = IPv6(src='11::22', dst='22::11')
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='SHA2-256-128', auth_key='secret key',
auth_algo='SHA2-256-128', auth_key=
b
'secret key',
tunnel_header=IPv6(src='aa::bb', dst='bb::aa'))
e = sa.encrypt(p)
...
...
@@ -3668,7 +3668,7 @@ e.src = 'cc::ee'
try:
d = sa.decrypt(e)
assert(False)
except IPSecIntegrityError
,
err:
except IPSecIntegrityError
as
err:
err
###############################################################################
...
...
@@ -3685,11 +3685,11 @@ p /= IPv6ExtHdrDestOpt()
p /= IPv6ExtHdrFragment()
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-SHA1-96', auth_key='secret key')
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
@@ -3707,11 +3707,11 @@ p /= IPv6ExtHdrHopByHop()
p /= IPv6ExtHdrRouting(addresses=['aa::bb', 'cc::dd', 'ee::ff'])
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(
str
(p))
p = IPv6(
raw
(p))
p
sa = SecurityAssociation(AH, spi=0x222,
auth_algo='HMAC-SHA1-96', auth_key='secret key')
auth_algo='HMAC-SHA1-96', auth_key=
b
'secret key')
e = sa.encrypt(p)
e
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment