@@ -466,25 +466,6 @@ def __iter__(self):
466
466
467
467
468
468
469
- @dataclass (frozen = True )
470
- class NonTransCodex :
471
- """
472
- NonTransCodex is codex all non-transferable derivation codes
473
- Only provide defined codes.
474
- Undefined are left out so that inclusion(exclusion) via 'in' operator works.
475
- """
476
- Ed25519N : str = 'B' # Ed25519 verification key non-transferable, basic derivation.
477
- ECDSA_256k1N : str = '1AAA' # ECDSA secp256k1 verification key non-transferable, basic derivation.
478
- Ed448N : str = '1AAC' # Ed448 non-transferable prefix public signing verification key. Basic derivation.
479
- ECDSA_256r1N : str = "1AAI" # ECDSA secp256r1 verification key non-transferable, basic derivation.
480
-
481
- def __iter__ (self ):
482
- return iter (astuple (self ))
483
-
484
-
485
- NonTransDex = NonTransCodex () # Make instance
486
-
487
-
488
469
# When add new to DigCodes update Saider.Digests and Serder.Digests class attr
489
470
@dataclass (frozen = True )
490
471
class DigCodex :
@@ -574,7 +555,7 @@ class PreCodex:
574
555
Undefined are left out so that inclusion(exclusion) via 'in' operator works.
575
556
"""
576
557
Ed25519N : str = 'B' # Ed25519 verification key non-transferable, basic derivation.
577
- Ed25519 : str = 'D' # Ed25519 verification key basic derivation
558
+ Ed25519 : str = 'D' # Ed25519 verification key, basic derivation.
578
559
Blake3_256 : str = 'E' # Blake3 256 bit digest self-addressing derivation.
579
560
Blake2b_256 : str = 'F' # Blake2b 256 bit digest self-addressing derivation.
580
561
Blake2s_256 : str = 'G' # Blake2s 256 bit digest self-addressing derivation.
@@ -586,6 +567,9 @@ class PreCodex:
586
567
SHA2_512 : str = '0G' # SHA2 512 bit digest self-addressing derivation.
587
568
ECDSA_256k1N : str = '1AAA' # ECDSA secp256k1 verification key non-transferable, basic derivation.
588
569
ECDSA_256k1 : str = '1AAB' # ECDSA public verification or encryption key, basic derivation
570
+ Ed448N : str = '1AAC' # Ed448 verification key non-transferable, basic derivation.
571
+ Ed448 : str = '1AAD' # Ed448 verification key, basic derivation.
572
+ Ed448_Sig : str = '1AAE' # Ed448 signature. Self-signing derivation.
589
573
ECDSA_256r1N : str = "1AAI" # ECDSA secp256r1 verification key non-transferable, basic derivation.
590
574
ECDSA_256r1 : str = "1AAJ" # ECDSA secp256r1 verification or encryption key, basic derivation
591
575
@@ -596,6 +580,50 @@ def __iter__(self):
596
580
PreDex = PreCodex () # Make instance
597
581
598
582
583
+ @dataclass (frozen = True )
584
+ class NonTransCodex :
585
+ """
586
+ NonTransCodex is codex all non-transferable derivation codes
587
+ Only provide defined codes.
588
+ Undefined are left out so that inclusion(exclusion) via 'in' operator works.
589
+ """
590
+ Ed25519N : str = 'B' # Ed25519 verification key non-transferable, basic derivation.
591
+ ECDSA_256k1N : str = '1AAA' # ECDSA secp256k1 verification key non-transferable, basic derivation.
592
+ Ed448N : str = '1AAC' # Ed448 verification key non-transferable, basic derivation.
593
+ ECDSA_256r1N : str = "1AAI" # ECDSA secp256r1 verification key non-transferable, basic derivation.
594
+
595
+ def __iter__ (self ):
596
+ return iter (astuple (self ))
597
+
598
+
599
+ NonTransDex = NonTransCodex () # Make instance
600
+
601
+
602
+ @dataclass (frozen = True )
603
+ class PreNonDigCodex :
604
+ """
605
+ PreNonDigCodex is codex all prefixive but non-digestive derivation codes
606
+ Only provide defined codes.
607
+ Undefined are left out so that inclusion(exclusion) via 'in' operator works.
608
+ """
609
+ Ed25519N : str = 'B' # Ed25519 verification key non-transferable, basic derivation.
610
+ Ed25519 : str = 'D' # Ed25519 verification key, basic derivation.
611
+ ECDSA_256k1N : str = '1AAA' # ECDSA secp256k1 verification key non-transferable, basic derivation.
612
+ ECDSA_256k1 : str = '1AAB' # ECDSA public verification or encryption key, basic derivation
613
+ Ed448N : str = '1AAC' # Ed448 verification key non-transferable, basic derivation.
614
+ Ed448 : str = '1AAD' # Ed448 verification key, basic derivation.
615
+ ECDSA_256r1N : str = "1AAI" # ECDSA secp256r1 verification key non-transferable, basic derivation.
616
+ ECDSA_256r1 : str = "1AAJ" # ECDSA secp256r1 verification or encryption key, basic derivation
617
+
618
+ def __iter__ (self ):
619
+ return iter (astuple (self ))
620
+
621
+
622
+ PreNonDigDex = PreNonDigCodex () # Make instance
623
+
624
+
625
+
626
+
599
627
# namedtuple for size entries in Matter and Counter derivation code tables
600
628
# hs is the hard size int number of chars in hard (stable) part of code
601
629
# ss is the soft size int number of chars in soft (unstable) part of code
@@ -3298,91 +3326,6 @@ def __init__(self, raw=None, code=None, ked=None, allows=None, **kwa):
3298
3326
#elif self.code in [MtrDex.Ed25519, MtrDex.ECDSA_256r1, MtrDex.ECDSA_256k1]:
3299
3327
#self._verify = self._verify_transferable
3300
3328
3301
- def derive (self , ked ):
3302
- """
3303
- Returns tuple (raw, code) of aid prefix as derived from key event dict ked.
3304
- uses a derivation code specific _derive method
3305
-
3306
- Parameters:
3307
- ked is inception key event dict
3308
- seed is only used for sig derivation it is the secret key/secret
3309
-
3310
- """
3311
- ilk = ked ["t" ]
3312
- if ilk not in (Ilks .icp , Ilks .dip , Ilks .vcp , Ilks .iss ):
3313
- raise ValueError ("Nonincepting ilk={} for prefix derivation." .format (ilk ))
3314
-
3315
- # Serder now does this check
3316
- #labels = getattr(Labels, ilk)
3317
- #for k in labels:
3318
- #if k not in ked:
3319
- #raise ValidationError("Missing element = {} from {} event for "
3320
- #"evt = {}.".format(k, ilk, ked))
3321
-
3322
- return (self ._derive (ked = ked ))
3323
-
3324
- def verify (self , ked , prefixed = False ):
3325
- """
3326
- Returns True if derivation from ked for .code matches .qb64 and
3327
- If prefixed also verifies ked["i"] matches .qb64
3328
- False otherwise
3329
-
3330
- Parameters:
3331
- ked is inception key event dict
3332
- """
3333
- ilk = ked ["t" ]
3334
- if ilk not in (Ilks .icp , Ilks .dip , Ilks .vcp , Ilks .iss ):
3335
- raise ValueError ("Nonincepting ilk={} for prefix derivation." .format (ilk ))
3336
-
3337
- # Serder now does this check
3338
- #labels = getattr(Labels, ilk)
3339
- #for k in labels:
3340
- #if k not in ked:
3341
- #raise ValidationError("Missing element = {} from {} event for "
3342
- #"evt = {}.".format(k, ilk, ked))
3343
-
3344
- return (self ._verify (ked = ked , pre = self .qb64 , prefixed = prefixed ))
3345
-
3346
- def _derive_non_transferable (self , ked ):
3347
- """
3348
- Returns tuple (raw, code) of basic nontransferable Ed25519 prefix (qb64)
3349
- as derived from inception key event dict ked keys[0]
3350
- """
3351
- ked = dict (ked ) # make copy so don't clobber original ked
3352
- try :
3353
- keys = ked ["k" ]
3354
- if len (keys ) != 1 :
3355
- raise DerivationError ("Basic derivation needs at most 1 key "
3356
- " got {} keys instead" .format (len (keys )))
3357
- verfer = Verfer (qb64 = keys [0 ])
3358
- except Exception as ex :
3359
- raise DerivationError ("Error extracting public key ="
3360
- " = {}" .format (ex ))
3361
-
3362
- if verfer .code not in [MtrDex .Ed25519N , MtrDex .ECDSA_256r1N , MtrDex .ECDSA_256k1N ]:
3363
- raise DerivationError ("Mismatch derivation code = {}."
3364
- "" .format (verfer .code ))
3365
-
3366
- try :
3367
- if verfer .code in [MtrDex .Ed25519N , MtrDex .ECDSA_256r1N , MtrDex .ECDSA_256k1N ] and ked ["n" ]:
3368
- raise DerivationError ("Non-empty nxt = {} for non-transferable"
3369
- " code = {}" .format (ked ["n" ],
3370
- verfer .code ))
3371
-
3372
- if verfer .code in [MtrDex .Ed25519N , MtrDex .ECDSA_256r1N , MtrDex .ECDSA_256k1N ] and "b" in ked and ked ["b" ]:
3373
- raise DerivationError ("Non-empty b = {} for non-transferable"
3374
- " code = {}" .format (ked ["b" ],
3375
- verfer .code ))
3376
-
3377
- if verfer .code in [MtrDex .Ed25519N , MtrDex .ECDSA_256r1N , MtrDex .ECDSA_256k1N ] and "a" in ked and ked ["a" ]:
3378
- raise DerivationError ("Non-empty a = {} for non-transferable"
3379
- " code = {}" .format (ked ["a" ],
3380
- verfer .code ))
3381
-
3382
- except Exception as ex :
3383
- raise DerivationError ("Error checking nxt = {}" .format (ex ))
3384
-
3385
- return (verfer .raw , verfer .code )
3386
3329
3387
3330
def _verify_non_transferable (self , ked , pre , prefixed = False ):
3388
3331
"""
@@ -3412,27 +3355,7 @@ def _verify_non_transferable(self, ked, pre, prefixed=False):
3412
3355
3413
3356
return True
3414
3357
3415
- def _derive_transferable (self , ked ):
3416
- """
3417
- Returns tuple (raw, code) of basic Ed25519 prefix (qb64)
3418
- as derived from inception key event dict ked keys[0]
3419
- """
3420
- ked = dict (ked ) # make copy so don't clobber original ked
3421
- try :
3422
- keys = ked ["k" ]
3423
- if len (keys ) != 1 :
3424
- raise DerivationError ("Basic derivation needs at most 1 key "
3425
- " got {} keys instead" .format (len (keys )))
3426
- verfer = Verfer (qb64 = keys [0 ])
3427
- except Exception as ex :
3428
- raise DerivationError ("Error extracting public key ="
3429
- " = {}" .format (ex ))
3430
3358
3431
- if verfer .code not in [MtrDex .Ed25519 , MtrDex .ECDSA_256r1 , MtrDex .ECDSA_256k1 ]:
3432
- raise DerivationError ("Mismatch derivation code = {}"
3433
- "" .format (verfer .code ))
3434
-
3435
- return (verfer .raw , verfer .code )
3436
3359
3437
3360
def _verify_transferable (self , ked , pre , prefixed = False ):
3438
3361
"""
@@ -3461,51 +3384,6 @@ def _verify_transferable(self, ked, pre, prefixed=False):
3461
3384
return True
3462
3385
3463
3386
3464
- def _derive_blake3_256 (self , ked ):
3465
- """
3466
- Returns tuple (raw, code) of pre (qb64) as blake3 digest
3467
- as derived from inception key event dict ked
3468
- """
3469
- ked = dict (ked ) # make copy so don't clobber original ked
3470
- ilk = ked ["t" ]
3471
- if ilk not in (Ilks .icp , Ilks .dip , Ilks .vcp , Ilks .iss ):
3472
- raise DerivationError ("Invalid ilk = {} to derive pre." .format (ilk ))
3473
-
3474
- # put in dummy pre to get size correct
3475
- ked ["i" ] = self .Dummy * Matter .Sizes [MtrDex .Blake3_256 ].fs
3476
- ked ["d" ] = ked ["i" ] # must be same dummy
3477
- #raw, proto, kind, ked, version = sizeify(ked=ked)
3478
- raw , _ , _ , _ , _ = sizeify (ked = ked )
3479
- dig = blake3 .blake3 (raw ).digest () # digest with dummy 'i' and 'd'
3480
- return (dig , MtrDex .Blake3_256 ) # dig is derived correct new 'i' and 'd'
3481
-
3482
-
3483
- def _verify_blake3_256 (self , ked , pre , prefixed = False ):
3484
- """
3485
- Returns True if verified False otherwise
3486
- Verify derivation of fully qualified Base64 prefix from
3487
- inception key event dict (ked)
3488
-
3489
- Parameters:
3490
- ked is inception key event dict
3491
- pre is Base64 fully qualified default to .qb64
3492
- """
3493
- try :
3494
- raw , code = self ._derive_blake3_256 (ked = ked ) # replace with dummy 'i'
3495
- crymat = Matter (raw = raw , code = MtrDex .Blake3_256 )
3496
- if crymat .qb64 != pre : # derived raw with dummy 'i' must match pre
3497
- return False
3498
-
3499
- if prefixed and ked ["i" ] != pre : # incoming 'i' must match pre
3500
- return False
3501
-
3502
- if ked ["i" ] != ked ["d" ]: # when digestive then SAID must match pre
3503
- return False
3504
-
3505
- except Exception as ex :
3506
- return False
3507
-
3508
- return True
3509
3387
3510
3388
3511
3389
0 commit comments