Przemek Stekiel
cd00d7f724
test PSA key derivation: add positive and negative cases for mixed-psk
Mix-PSK-to-MS test vectors are generated using python-tls library:
https://github.com/python-tls/tls
Steps to generate test vectors:
1. git clone git@github.com:python-tls/tls.git
2. cd tls
3. python3 setup.py build
4. sudo python3 setup.py install
5. Use the python script below to generate Master Secret (see description for details):
"""
Script to derive MS using mixed PSK to MS algorithm.
Script can be used to generate expected result for mixed PSK to MS tests.
Script uses python tls library:
https://github.com/python-tls/tls
Example usage:
derive_ms.py <secret> <other_secret> <seed> <label> <hash>
derive_ms.py 01020304 ce2fa604b6a3e08fc42eda74ab647adace1168b199ed178dbaae12521d68271d7df56eb56c55878034cf01bd887ba4d7 5bc0b19b4a8b24b07afe7ec65c471e94a7d518fcef06c3574315255c52afe21b5bc0b19b872b9b26508458f03603744d575f463a11ae7f1b090c012606fd3e9f 6d617374657220736563726574 SHA256
secret : 01020304
other_secret : ce2fa604b6a3e08fc42eda74ab647adace1168b199ed178dbaae12521d68271d7df56eb56c55878034cf01bd887ba4d7
pms : 0030ce2fa604b6a3e08fc42eda74ab647adace1168b199ed178dbaae12521d68271d7df56eb56c55878034cf01bd887ba4d7000401020304
seed : 5bc0b19b4a8b24b07afe7ec65c471e94a7d518fcef06c3574315255c52afe21b5bc0b19b872b9b26508458f03603744d575f463a11ae7f1b090c012606fd3e9f
label : 6d617374657220736563726574
output : 168fecea35190f9df34c042f24ecaa5e7825337f2cd82719464df5462f16aae84cb38a65c0d612ca9273f998ad32c05b
"""
from cryptography.hazmat.primitives import hashes
from tls._common.prf import prf
import os
import sys
def build_pms(other_secret: bytes, secret: bytes) -> bytes:
other_secret_size = len(other_secret).to_bytes(2, byteorder='big')
secret_size = len(secret).to_bytes(2, byteorder='big')
return(other_secret_size + other_secret + secret_size + secret)
def derive_ms(secret: bytes, other_secret: bytes, seed: bytes, label: bytes, hash: hashes.HashAlgorithm) -> bytes:
return prf(build_pms(other_secret, secret), label, seed, hash, 48)
def main():
#check args
if len(sys.argv) != 6:
print("Invalid number of arguments. Expected: <secret> <other_secret> <seed> <label> <hash>" )
return
if sys.argv[5] != 'SHA384' and sys.argv[5] != 'SHA256':
print("Invalid hash algorithm. Expected: SHA256 or SHA384" )
return
secret = bytes.fromhex(sys.argv[1])
other_secret = bytes.fromhex(sys.argv[2])
seed = bytes.fromhex(sys.argv[3])
label = bytes.fromhex(sys.argv[4])
hash_func = hashes.SHA384() if sys.argv[5] == 'SHA384' else hashes.SHA256()
pms = build_pms(other_secret, secret)
actual_output = derive_ms(secret, other_secret, seed, label, hash_func)
print('secret : ' + secret.hex())
print('other_secret : ' + other_secret.hex())
print('pms : ' + pms.hex())
print('seed : ' + seed.hex())
print('label : ' + label.hex())
print('output : ' + actual_output.hex())
if __name__ == "__main__":
main()
Signed-off-by: Przemek Stekiel <przemyslaw.stekiel@mobica.com>
2022-04-21 11:41:41 +02:00
..
2021-06-14 16:17:32 +02:00
2021-10-19 22:32:44 +02:00
2021-07-20 13:36:16 +02:00
2019-08-15 15:44:50 +01:00
2019-08-15 15:44:50 +01:00
2019-08-15 15:44:50 +01:00
2021-09-27 16:22:08 +02:00
2019-08-15 15:44:50 +01:00
2021-05-27 17:27:14 +02:00
2019-08-15 15:44:50 +01:00
2021-05-27 17:35:04 +02:00
2021-05-28 12:56:57 +02:00
2020-02-05 15:40:22 +00:00
2021-06-22 12:44:05 +02:00
2019-10-31 19:17:36 +02:00
2021-04-07 16:31:09 +01:00
2021-10-25 22:15:19 +02:00
2021-11-26 17:20:02 +01:00
2021-05-27 17:35:04 +02:00
2021-05-27 17:35:04 +02:00
2021-10-21 11:33:41 +02:00
2021-10-21 11:33:41 +02:00
2021-05-27 17:27:14 +02:00
2021-05-27 17:27:14 +02:00
2021-05-27 17:27:14 +02:00
2021-05-27 17:27:14 +02:00
2021-10-28 18:00:33 +02:00
2021-10-28 18:00:33 +02:00
2021-10-28 18:00:33 +02:00
2019-08-15 15:44:50 +01:00
2022-02-21 09:57:51 +00:00
2022-02-21 09:57:51 +00:00
2019-09-20 15:59:31 +02:00
2022-02-17 21:30:25 +00:00
2022-01-19 07:08:27 -05:00
2019-08-15 15:44:50 +01:00
2019-09-20 16:01:59 +02:00
2019-09-20 15:59:31 +02:00
2021-06-16 10:34:25 +02:00
2019-08-15 15:44:50 +01:00
2019-08-15 15:44:50 +01:00
2019-11-21 13:49:20 +01:00
2021-06-08 16:45:41 +02:00
2021-06-17 21:46:29 +02:00
2021-08-10 13:34:32 +08:00
2019-08-15 15:44:50 +01:00
2021-09-27 16:22:08 +02:00
2021-06-22 12:47:21 +02:00
2021-06-22 12:44:05 +02:00
2021-06-07 15:41:49 +02:00
2021-06-22 12:44:05 +02:00
2021-05-27 17:27:14 +02:00
2021-06-25 00:46:22 +02:00
2021-03-17 11:36:31 +01:00
2021-05-27 17:34:14 +02:00
2022-03-21 09:49:40 +01:00
2022-03-28 07:25:12 +02:00
2021-05-11 13:15:19 +02:00
2021-04-07 16:31:09 +01:00
2015-04-08 13:25:31 +02:00
2018-08-06 11:40:57 +01:00
2021-10-04 13:54:55 +02:00
2021-10-04 13:54:55 +02:00
2019-09-20 15:59:31 +02:00
2019-09-20 15:59:31 +02:00
2019-09-20 15:59:31 +02:00
2019-09-20 15:59:31 +02:00
2019-08-15 15:44:50 +01:00
2021-10-21 14:55:59 +02:00
2021-05-27 17:35:04 +02:00
2021-06-16 10:34:45 +02:00
2022-03-16 16:53:23 +01:00
2020-11-25 14:25:56 -08:00
2021-05-10 13:51:53 +02:00
2021-05-10 13:51:53 +02:00
2021-04-28 14:38:37 +02:00
2021-04-28 14:38:37 +02:00
2021-06-16 10:34:25 +02:00
2022-03-04 16:48:17 +00:00
2021-06-16 10:34:25 +02:00
2021-06-16 10:34:25 +02:00
2019-10-31 15:07:35 +01:00
2019-10-31 15:07:45 +01:00
2021-06-22 12:47:21 +02:00
2021-06-22 12:47:21 +02:00
2021-03-29 14:20:18 +01:00
2021-12-10 13:47:55 +01:00
2021-02-25 15:56:48 +01:00
2021-09-24 09:21:29 +09:00
2021-06-21 13:27:29 +02:00
2020-06-26 10:45:16 +02:00
2021-05-10 13:51:53 +02:00
2021-04-27 17:18:52 +01:00
2022-02-08 14:53:50 -05:00
2022-02-08 14:53:50 -05:00
2022-03-23 11:16:53 +08:00
2022-04-04 17:51:49 +02:00
2021-05-12 15:18:20 +01:00
2021-06-24 10:28:20 +02:00
2021-04-28 14:38:37 +02:00
2021-06-22 18:39:53 +02:00
2021-04-28 14:38:37 +02:00
2020-06-12 14:33:08 +02:00
2021-12-10 20:53:59 +00:00
2021-12-10 20:53:59 +00:00
2021-06-18 12:59:38 +02:00
2021-06-17 09:38:38 +02:00
2019-11-05 15:32:53 +01:00
2021-06-17 09:38:38 +02:00
2021-05-27 17:27:14 +02:00
2021-05-27 17:27:14 +02:00
2021-03-24 09:26:44 +01:00
2021-02-01 13:17:23 +01:00
2022-04-04 14:21:18 +01:00
2022-04-04 14:21:10 +01:00
2021-03-10 13:19:45 -07:00
2021-04-19 10:55:21 +02:00
2021-11-02 10:52:53 +01:00
2021-06-16 10:34:25 +02:00
2021-01-06 18:21:18 +01:00
2019-10-23 19:47:05 +02:00
2021-06-15 15:47:44 +02:00
2021-11-03 15:51:20 +01:00
2021-11-03 15:51:32 +01:00
2021-10-20 10:04:55 +02:00
2021-02-17 14:50:17 +01:00
2021-06-23 13:43:08 +02:00
2021-06-23 13:43:08 +02:00
2020-05-11 11:15:26 +02:00
2021-01-06 18:21:18 +01:00
2021-09-21 11:59:39 +02:00
2021-02-23 20:36:07 +01:00
2021-08-17 02:46:00 +05:30
2021-06-29 17:06:33 +02:00
2021-06-23 13:44:35 +02:00
2021-07-13 17:12:53 +02:00
2022-04-21 11:41:41 +02:00
2022-04-21 11:41:41 +02:00
2022-02-08 15:19:26 +01:00
2022-02-08 15:19:26 +01:00
2021-02-16 15:46:06 +01:00
2021-05-11 13:15:19 +02:00
2021-06-22 12:47:21 +02:00
2021-06-25 11:17:12 +01:00
2021-05-27 17:35:04 +02:00
2021-06-08 16:45:41 +02:00
2022-04-01 12:29:06 +02:00
2022-04-01 12:29:06 +02:00
2022-03-04 05:07:45 -05:00
2021-06-15 15:47:44 +02:00
2021-12-15 09:02:53 +01:00
2020-04-22 16:01:48 +02:00
2021-06-18 12:59:38 +02:00
2021-06-07 13:52:23 +02:00
2021-06-16 10:34:25 +02:00
2022-03-21 09:57:57 +01:00