Skip to content

Commit 035d735

Browse files
committed
refactored Prefixer to remove verify and derive methods. Functionality moved to Serder.
Removed redundant SerderKERI._verify() calls as its init defaults to calling ._verify
1 parent 5a2c7ed commit 035d735

File tree

5 files changed

+111
-234
lines changed

5 files changed

+111
-234
lines changed

src/keri/core/coring.py

Lines changed: 48 additions & 170 deletions
Original file line numberDiff line numberDiff line change
@@ -466,25 +466,6 @@ def __iter__(self):
466466

467467

468468

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-
488469
# When add new to DigCodes update Saider.Digests and Serder.Digests class attr
489470
@dataclass(frozen=True)
490471
class DigCodex:
@@ -574,7 +555,7 @@ class PreCodex:
574555
Undefined are left out so that inclusion(exclusion) via 'in' operator works.
575556
"""
576557
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.
578559
Blake3_256: str = 'E' # Blake3 256 bit digest self-addressing derivation.
579560
Blake2b_256: str = 'F' # Blake2b 256 bit digest self-addressing derivation.
580561
Blake2s_256: str = 'G' # Blake2s 256 bit digest self-addressing derivation.
@@ -586,6 +567,9 @@ class PreCodex:
586567
SHA2_512: str = '0G' # SHA2 512 bit digest self-addressing derivation.
587568
ECDSA_256k1N: str = '1AAA' # ECDSA secp256k1 verification key non-transferable, basic derivation.
588569
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.
589573
ECDSA_256r1N: str = "1AAI" # ECDSA secp256r1 verification key non-transferable, basic derivation.
590574
ECDSA_256r1: str = "1AAJ" # ECDSA secp256r1 verification or encryption key, basic derivation
591575

@@ -596,6 +580,50 @@ def __iter__(self):
596580
PreDex = PreCodex() # Make instance
597581

598582

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+
599627
# namedtuple for size entries in Matter and Counter derivation code tables
600628
# hs is the hard size int number of chars in hard (stable) part of code
601629
# 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):
32983326
#elif self.code in [MtrDex.Ed25519, MtrDex.ECDSA_256r1, MtrDex.ECDSA_256k1]:
32993327
#self._verify = self._verify_transferable
33003328

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)
33863329

33873330
def _verify_non_transferable(self, ked, pre, prefixed=False):
33883331
"""
@@ -3412,27 +3355,7 @@ def _verify_non_transferable(self, ked, pre, prefixed=False):
34123355

34133356
return True
34143357

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))
34303358

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)
34363359

34373360
def _verify_transferable(self, ked, pre, prefixed=False):
34383361
"""
@@ -3461,51 +3384,6 @@ def _verify_transferable(self, ked, pre, prefixed=False):
34613384
return True
34623385

34633386

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
35093387

35103388

35113389

src/keri/core/eventing.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,6 @@ def incept(keys,
761761
saids = {'i': code}
762762

763763
serder = serdering.SerderKERI(sad=ked, makify=True, saids=saids)
764-
serder._verify() # raises error if fails verifications
765764
return serder
766765

767766

@@ -926,12 +925,8 @@ def rotate(pre,
926925
)
927926

928927
serder = serdering.SerderKERI(sad=ked, makify=True)
929-
serder._verify() # raises error if fails verifications
930928
return serder
931929

932-
#_, ked = coring.Saider.saidify(sad=ked)
933-
934-
#return Serder(ked=ked) # return serialized ked
935930

936931
def deltate(pre,
937932
keys,
@@ -1007,13 +1002,8 @@ def interact(pre,
10071002
)
10081003

10091004
serder = serdering.SerderKERI(sad=sad, makify=True)
1010-
serder._verify() # raises error if fails verifications
10111005
return serder
10121006

1013-
#_, ked = coring.Saider.saidify(sad=ked)
1014-
1015-
#return Serder(ked=ked) # return serialized ked
1016-
10171007

10181008
def receipt(pre,
10191009
sn,
@@ -1050,7 +1040,6 @@ def receipt(pre,
10501040
)
10511041

10521042
serder = serdering.SerderKERI(sad=sad, makify=True)
1053-
serder._verify() # raises error if fails verifications
10541043
return serder
10551044

10561045

@@ -1105,7 +1094,6 @@ def query(route="",
11051094
)
11061095

11071096
serder = serdering.SerderKERI(sad=sad, makify=True)
1108-
serder._verify() # raises error if fails verifications
11091097
return serder
11101098

11111099
#_, ked = coring.Saider.saidify(sad=ked)
@@ -1162,7 +1150,6 @@ def reply(route="",
11621150
)
11631151

11641152
serder = serdering.SerderKERI(sad=sad, makify=True)
1165-
serder._verify() # raises error if fails verifications
11661153
return serder
11671154

11681155

@@ -1204,7 +1191,6 @@ def prod(route="",
12041191
)
12051192

12061193
serder = serdering.SerderKERI(sad=sad, makify=True)
1207-
serder._verify() # raises error if fails verifications
12081194
return serder
12091195

12101196
#_, ked = coring.Saider.saidify(sad=ked)
@@ -1264,7 +1250,6 @@ def bare(route="",
12641250
)
12651251

12661252
serder = serdering.SerderKERI(sad=sad, makify=True)
1267-
serder._verify() # raises error if fails verifications
12681253
return serder
12691254

12701255
#_, sad = coring.Saider.saidify(sad=sad)

0 commit comments

Comments
 (0)