示例#1
0
 def test_vector(self):
     curve = GOST3410Curve(*CURVE_PARAMS["GostR3410_2012_TC26_ParamSetA"])
     ukm = ukm_unmarshal(hexdec("1d80603c8544c727"))
     prvA = prv_unmarshal(hexdec("c990ecd972fce84ec4db022778f50fcac726f46708384b8d458304962d7147f8c2db41cef22c90b102f2968404f9b9be6d47c79692d81826b32b8daca43cb667"))
     pubA = pub_unmarshal(hexdec("aab0eda4abff21208d18799fb9a8556654ba783070eba10cb9abb253ec56dcf5d3ccba6192e464e6e5bcb6dea137792f2431f6c897eb1b3c0cc14327b1adc0a7914613a3074e363aedb204d38d3563971bd8758e878c9db11403721b48002d38461f92472d40ea92f9958c0ffa4c93756401b97f89fdbe0b5e46e4a4631cdb5a"), mode=2012)
     prvB = prv_unmarshal(hexdec("48c859f7b6f11585887cc05ec6ef1390cfea739b1a18c0d4662293ef63b79e3b8014070b44918590b4b996acfea4edfbbbcccc8c06edd8bf5bda92a51392d0db"))
     pubB = pub_unmarshal(hexdec("192fe183b9713a077253c72c8735de2ea42a3dbc66ea317838b65fa32523cd5efca974eda7c863f4954d1147f1f2b25c395fce1c129175e876d132e94ed5a65104883b414c9b592ec4dc84826f07d0b6d9006dda176ce48c391e3f97d102e03bb598bf132a228a45f7201aba08fc524a2d77e43a362ab022ad4028f75bde3b79"), mode=2012)
     vko = hexdec("79f002a96940ce7bde3259a52e015297adaad84597a0d205b50e3e1719f97bfa7ee1d2661fa9979a5aa235b558a7e6d9f88f982dd63fc35a8ec0dd5e242d3bdf")
     self.assertEqual(kek_34102012512(curve, prvA, pubB, ukm), vko)
     self.assertEqual(kek_34102012512(curve, prvB, pubA, ukm), vko)
示例#2
0
 def keker(curve, prv, pub, ukm):
     return kek_34102012256(
         curve,
         prv_unmarshal(prv),
         pub_unmarshal(pub, mode=2012),
         ukm_unmarshal(ukm),
     )
示例#3
0
def export_public_key(key, curve_type="id-tc26-gost-3410-2012-256-paramSetA"):
    curve = gost3410.CURVES[curve_type]
    if isinstance(key, tuple):
        return PublicKey(curve_type=curve_type, pub_key=key)
    else:
        key = gost3410.pub_unmarshal(key)
        return PublicKey(curve_type=curve_type, pub_key=key)
示例#4
0
 def test_vector(self):
     curve = CURVES["id-tc26-gost-3410-12-512-paramSetA"]
     ukm = ukm_unmarshal(hexdec("1d80603c8544c727"))
     prvA = prv_unmarshal(
         hexdec(
             "c990ecd972fce84ec4db022778f50fcac726f46708384b8d458304962d7147f8c2db41cef22c90b102f2968404f9b9be6d47c79692d81826b32b8daca43cb667"
         ))
     pubA = pub_unmarshal(hexdec(
         "aab0eda4abff21208d18799fb9a8556654ba783070eba10cb9abb253ec56dcf5d3ccba6192e464e6e5bcb6dea137792f2431f6c897eb1b3c0cc14327b1adc0a7914613a3074e363aedb204d38d3563971bd8758e878c9db11403721b48002d38461f92472d40ea92f9958c0ffa4c93756401b97f89fdbe0b5e46e4a4631cdb5a"
     ),
                          mode=2012)
     prvB = prv_unmarshal(
         hexdec(
             "48c859f7b6f11585887cc05ec6ef1390cfea739b1a18c0d4662293ef63b79e3b8014070b44918590b4b996acfea4edfbbbcccc8c06edd8bf5bda92a51392d0db"
         ))
     pubB = pub_unmarshal(hexdec(
         "192fe183b9713a077253c72c8735de2ea42a3dbc66ea317838b65fa32523cd5efca974eda7c863f4954d1147f1f2b25c395fce1c129175e876d132e94ed5a65104883b414c9b592ec4dc84826f07d0b6d9006dda176ce48c391e3f97d102e03bb598bf132a228a45f7201aba08fc524a2d77e43a362ab022ad4028f75bde3b79"
     ),
                          mode=2012)
     vko = hexdec(
         "c9a9a77320e2cc559ed72dce6f47e2192ccea95fa648670582c054c0ef36c221")
     self.assertSequenceEqual(kek_34102012256(curve, prvA, pubB, ukm), vko)
     self.assertSequenceEqual(kek_34102012256(curve, prvB, pubA, ukm), vko)
示例#5
0
 def __init__(self,
              curve_type=None,
              pub_key=None,
              priv_key=None,
              cert=None):
     curve = gost3410.CURVES[curve_type]
     if pub_key == None:
         self.key = gost3410.public_key(curve, priv_key)
     else:
         if type(pub_key) == tuple:
             self.key = pub_key
         else:  # type = bytes/bytearray
             self.key = gost3410.pub_unmarshal(pub_key)
     self.curve = curve
     self.curve_type = curve_type
     self.certificate = cert
示例#6
0
 def process_cert(self, curve_name, mode, hasher, prv_key_raw, cert_raw):
     cert, tail = Certificate().decode(cert_raw)
     self.assertSequenceEqual(tail, b"")
     curve = GOST3410Curve(*CURVE_PARAMS[curve_name])
     prv_key = prv_unmarshal(prv_key_raw)
     pub_key_raw, tail = OctetString().decode(
         bytes(cert["tbsCertificate"]["subjectPublicKeyInfo"]
               ["subjectPublicKey"]))
     pub_key = pub_unmarshal(bytes(pub_key_raw), mode=mode)
     self.assertSequenceEqual(tail, b"")
     self.assertSequenceEqual(pub_key, public_key(curve, prv_key))
     self.assertTrue(
         verify(
             curve,
             pub_key,
             hasher(cert["tbsCertificate"].encode()).digest()[::-1],
             bytes(cert["signatureValue"]),
             mode=mode,
         ))
示例#7
0
 def process_cert(self, curve_name, mode, hasher, prv_key_raw, cert_raw):
     cert, tail = Certificate().decode(
         cert_raw,
         ctx={
             "defines_by_path": ((
                 (
                     "tbsCertificate",
                     "subjectPublicKeyInfo",
                     "algorithm",
                     "algorithm",
                 ),
                 ((
                     ("..", "subjectPublicKey"),
                     {
                         id_tc26_gost3410_2012_256: OctetString(),
                         id_tc26_gost3410_2012_512: OctetString(),
                     },
                 ), ),
             ), ),
         })
     self.assertSequenceEqual(tail, b"")
     curve = CURVES[curve_name]
     prv_key = prv_unmarshal(prv_key_raw)
     spk = cert["tbsCertificate"]["subjectPublicKeyInfo"][
         "subjectPublicKey"]
     self.assertIsNotNone(spk.defined)
     _, pub_key_raw = spk.defined
     pub_key = pub_unmarshal(bytes(pub_key_raw), mode=mode)
     self.assertSequenceEqual(pub_key, public_key(curve, prv_key))
     self.assertTrue(
         verify(
             curve,
             pub_key,
             hasher(cert["tbsCertificate"].encode()).digest()[::-1],
             bytes(cert["signatureValue"]),
             mode=mode,
         ))
示例#8
0
文件: crypto.py 项目: ftomza/py-sspvo
 def _parse_public_key(cls, cert: str) -> Tuple[int, int]:
     tbs_cert = cls._parse_asn_tbs_cert(cert)
     info = cls._get_asn_subject_pub_info(tbs_cert)
     private_key = cls._parse_asn_public_key(info)
     return gost3410.pub_unmarshal(bytes(private_key))