Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
opcua-asyncio
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nikola Balog
opcua-asyncio
Commits
98fd52a1
Commit
98fd52a1
authored
Dec 22, 2019
by
oroulet
Committed by
GitHub
Dec 22, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #110 from FreeOpcUa/token
jonasgreen88 : fix token
parents
4a34630e
c51b2c73
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
165 additions
and
96 deletions
+165
-96
asyncua/client/client.py
asyncua/client/client.py
+1
-3
asyncua/client/ua_client.py
asyncua/client/ua_client.py
+6
-3
asyncua/common/connection.py
asyncua/common/connection.py
+94
-40
asyncua/crypto/security_policies.py
asyncua/crypto/security_policies.py
+22
-9
asyncua/server/uaprocessor.py
asyncua/server/uaprocessor.py
+38
-40
asyncua/ua/uaprotocol_hand.py
asyncua/ua/uaprotocol_hand.py
+4
-1
No files found.
asyncua/client/client.py
View file @
98fd52a1
...
...
@@ -255,10 +255,8 @@ class Client:
params
.
SecurityMode
=
self
.
security_policy
.
Mode
params
.
RequestedLifetime
=
self
.
secure_channel_timeout
# length should be equal to the length of key of symmetric encryption
nonce
=
create_nonce
(
self
.
security_policy
.
symmetric_key_size
)
params
.
ClientNonce
=
nonce
# this nonce is used to create a symmetric key
params
.
ClientNonce
=
create_nonce
(
self
.
security_policy
.
symmetric_key_size
)
result
=
await
self
.
uaclient
.
open_secure_channel
(
params
)
self
.
security_policy
.
make_symmetric_key
(
nonce
,
result
.
ServerNonce
)
self
.
secure_channel_timeout
=
result
.
SecurityToken
.
RevisedLifetime
async
def
close_secure_channel
(
self
):
...
...
asyncua/client/ua_client.py
View file @
98fd52a1
...
...
@@ -120,6 +120,11 @@ class UASocketProtocol(asyncio.Protocol):
self
.
_request_id
+=
1
future
=
self
.
loop
.
create_future
()
self
.
_callbackmap
[
self
.
_request_id
]
=
future
# Change to the new security token if the connection has been renewed.
if
self
.
_connection
.
next_security_token
.
TokenId
!=
0
:
self
.
_connection
.
revolve_tokens
()
msg
=
self
.
_connection
.
message_to_binary
(
binreq
,
message_type
=
message_type
,
request_id
=
self
.
_request_id
)
self
.
transport
.
write
(
msg
)
return
future
...
...
@@ -195,11 +200,9 @@ class UASocketProtocol(asyncio.Protocol):
self
.
_send_request
(
request
,
message_type
=
ua
.
MessageType
.
SecureOpen
),
self
.
timeout
)
# FIXME: we have a race condition here
# we can get a packet with the new token id before we reach to store it..
response
=
struct_from_binary
(
ua
.
OpenSecureChannelResponse
,
result
)
response
.
ResponseHeader
.
ServiceResult
.
check
()
self
.
_connection
.
set_channel
(
response
.
Parameters
)
self
.
_connection
.
set_channel
(
response
.
Parameters
,
params
.
RequestType
,
params
.
ClientNonce
)
return
response
.
Parameters
async
def
close_secure_channel
(
self
):
...
...
asyncua/common/connection.py
View file @
98fd52a1
This diff is collapsed.
Click to expand it.
asyncua/crypto/security_policies.py
View file @
98fd52a1
...
...
@@ -422,14 +422,17 @@ class SecurityPolicyBasic128Rsa15(SecurityPolicy):
self
.
server_certificate
=
uacrypto
.
der_from_x509
(
server_cert
)
self
.
client_certificate
=
uacrypto
.
der_from_x509
(
client_cert
)
def
make_
symmetric_key
(
self
,
nonce1
,
nonce2
):
def
make_
local_symmetric_key
(
self
,
secret
,
seed
):
key_sizes
=
(
self
.
signature_key_size
,
self
.
symmetric_key_size
,
16
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha1
(
nonce2
,
nonce1
,
key_sizes
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha1
(
secret
,
seed
,
key_sizes
)
self
.
symmetric_cryptography
.
Signer
=
SignerAesCbc
(
sigkey
)
self
.
symmetric_cryptography
.
Encryptor
=
EncryptorAesCbc
(
key
,
init_vec
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha1
(
nonce1
,
nonce2
,
key_sizes
)
def
make_remote_symmetric_key
(
self
,
secret
,
seed
):
key_sizes
=
(
self
.
signature_key_size
,
self
.
symmetric_key_size
,
16
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha1
(
secret
,
seed
,
key_sizes
)
self
.
symmetric_cryptography
.
Verifier
=
VerifierAesCbc
(
sigkey
)
self
.
symmetric_cryptography
.
Decryptor
=
DecryptorAesCbc
(
key
,
init_vec
)
...
...
@@ -494,15 +497,20 @@ class SecurityPolicyBasic256(SecurityPolicy):
self
.
server_certificate
=
uacrypto
.
der_from_x509
(
server_cert
)
self
.
client_certificate
=
uacrypto
.
der_from_x509
(
client_cert
)
def
make_
symmetric_key
(
self
,
nonce1
,
nonce2
):
def
make_
local_symmetric_key
(
self
,
secret
,
seed
):
# specs part 6, 6.7.5
key_sizes
=
(
self
.
signature_key_size
,
self
.
symmetric_key_size
,
16
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha1
(
nonce2
,
nonce1
,
key_sizes
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha1
(
secret
,
seed
,
key_sizes
)
self
.
symmetric_cryptography
.
Signer
=
SignerAesCbc
(
sigkey
)
self
.
symmetric_cryptography
.
Encryptor
=
EncryptorAesCbc
(
key
,
init_vec
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha1
(
nonce1
,
nonce2
,
key_sizes
)
def
make_remote_symmetric_key
(
self
,
secret
,
seed
):
# specs part 6, 6.7.5
key_sizes
=
(
self
.
signature_key_size
,
self
.
symmetric_key_size
,
16
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha1
(
secret
,
seed
,
key_sizes
)
self
.
symmetric_cryptography
.
Verifier
=
VerifierAesCbc
(
sigkey
)
self
.
symmetric_cryptography
.
Decryptor
=
DecryptorAesCbc
(
key
,
init_vec
)
...
...
@@ -560,15 +568,20 @@ class SecurityPolicyBasic256Sha256(SecurityPolicy):
self
.
server_certificate
=
uacrypto
.
der_from_x509
(
server_cert
)
self
.
client_certificate
=
uacrypto
.
der_from_x509
(
client_cert
)
def
make_
symmetric_key
(
self
,
nonce1
,
nonce2
):
def
make_
local_symmetric_key
(
self
,
secret
,
seed
):
# specs part 6, 6.7.5
key_sizes
=
(
self
.
signature_key_size
,
self
.
symmetric_key_size
,
16
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha256
(
nonce2
,
nonce1
,
key_sizes
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha256
(
secret
,
seed
,
key_sizes
)
self
.
symmetric_cryptography
.
Signer
=
SignerHMac256
(
sigkey
)
self
.
symmetric_cryptography
.
Encryptor
=
EncryptorAesCbc
(
key
,
init_vec
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha256
(
nonce1
,
nonce2
,
key_sizes
)
def
make_remote_symmetric_key
(
self
,
secret
,
seed
):
# specs part 6, 6.7.5
key_sizes
=
(
self
.
signature_key_size
,
self
.
symmetric_key_size
,
16
)
(
sigkey
,
key
,
init_vec
)
=
uacrypto
.
p_sha256
(
secret
,
seed
,
key_sizes
)
self
.
symmetric_cryptography
.
Verifier
=
VerifierHMac256
(
sigkey
)
self
.
symmetric_cryptography
.
Decryptor
=
DecryptorAesCbc
(
key
,
init_vec
)
...
...
asyncua/server/uaprocessor.py
View file @
98fd52a1
This diff is collapsed.
Click to expand it.
asyncua/ua/uaprotocol_hand.py
View file @
98fd52a1
...
...
@@ -229,7 +229,10 @@ class SecurityPolicy:
self
.
server_certificate
=
None
self
.
client_certificate
=
None
def
make_symmetric_key
(
self
,
a
,
b
):
def
make_local_symmetric_key
(
self
,
secret
,
seed
):
pass
def
make_remote_symmetric_key
(
self
,
secret
,
seed
):
pass
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment