Source code for keri.app.signing

# -*- encoding: utf-8 -*-
"""
KERI
keri.app.signing module

"""
from .. import Vrsn_1_0
from .habbing import GroupHab
from ..core import Pather, Counter, Seqner, Diger, Codens


def serialize(creder, prefixer, seqner, saider):
    craw = bytearray(creder.raw)
    craw.extend(Counter(Codens.SealSourceTriples, count=1,
                             version=Vrsn_1_0).qb64b)
    craw.extend(prefixer.qb64b)
    craw.extend(seqner.qb64b)
    craw.extend(saider.qb64b)

    return bytes(craw)


#def ratify(hab, serder, paths=None, pipelined=False):
    #""" Sign the SAD or SAIDs with the keys from the Habitat.

    #Sign the SADs or SAIDs of the SADs as identified by the paths.  If paths is
    #None, default to signing the root SAD only.

    #Parameters:
        #hab (Habitat): environment used to sign the SAD
        #serder (Union[Serder,Creder]): the self addressing data (SAD)
        #paths (list): list of paths specified as arrays of path components
        #pipelined (bool): True means prepend pipelining count code to attachemnts
            #False means to not prepend pipelining count code

    #Returns:
        #bytes: serialized SAD with qb64 CESR Proof Signature attachments

    #"""
    #paths = [[]] if paths is None else paths
    #sadsigers, sadcigars = signPaths(hab=hab, serder=serder, paths=paths)
    #return provision(serder, sadsigers=sadsigers, sadcigars=sadcigars, pipelined=pipelined)




#def provision(serder, *, sadsigers=None, sadcigars=None, pipelined=False):
    #"""
    #Attaches indexed signatures from sigers and/or cigars and/or wigers to
    #KERI message data from serder
    #Parameters:
        #serder (Union[Serder,Creder]): instance containing the event
        #sadsigers (list): of Siger instances (optional) to create indexed signatures
        #sadcigars (list): optional list of Cigars instances of non-transferable non indexed
            #signatures from  which to form receipt couples.
            #Each cigar.vefer.qb64 is pre of receiptor and cigar.qb64 is signature
        #pipelined (bool): True means prepend pipelining count code to attachemnts
            #False means to not prepend pipelining count code

    #Returns: bytearray SAD with CESR Proof Signature

    #"""
    #msg = bytearray(serder.raw)  # make copy into new bytearray so can be deleted
    #if not (sadsigers or sadcigars):
        #raise ValueError("Missing attached signatures on message = {}."
                         #"".format(serder.ked))

    #msg.extend(eventing.proofize(sadtsgs=sadsigers, sadcigars=sadcigars, pipelined=pipelined))
    #return msg


[docs] def signPaths(hab, serder, paths): """ Sign the SAD or SAIDs with the keys from the Habitat. Sign the SADs or SAIDs of the SADs as identified by the paths. Parameters: hab (Habitat): environment used to sign the SAD serder (Union[Serder,Creder]): the self addressing data (SAD) paths (list[list]): list of lists of path parts Returns: str: qb64 signature attachment """ sadsigers = [] sadcigars = [] if hab.kever.prefixer.transferable: prefixer, seqner, saider, indices = transSeal(hab) for parts in paths: pather = Pather(parts=parts) data = pather.tail(serder=serder) sigers = hab.sign(ser=data, verfers=hab.kever.verfers, indexed=True) sadsigers.append((pather, prefixer, seqner, saider, sigers)) else: for parts in paths: pather = Pather(parts=parts) data = pather.tail(serder=serder) cigars = hab.sign(ser=data, verfers=hab.kever.verfers, indexed=False) sadcigars.append((pather, cigars)) return sadsigers, sadcigars
[docs] def transSeal(hab): """ Returns seal components and signing indices as appropriate for current state of Habitat Args: hab (Habitat): environment that contains the information for the idenfitier prefix Returns: tuple: seal components with signing indices ToDo: NRR indices for both hab.smids and hab.rmids """ # create SealEvent or SealLast for endorser's est evt whose keys are # used to sign if not isinstance(hab, GroupHab): # not a group use own kever indices = None # use default order else: # group so use gid kever smids, _ = hab.members() indices = [smids.index(hab.mhab.pre)] # use group order* kever = hab.kever prefixer = kever.prefixer seqner = Seqner(sn=kever.lastEst.s) diger = Diger(qb64=kever.lastEst.d) return prefixer, seqner, diger, indices
#class SadPathSigGroup: #""" Transposable group of signatures #Supports transposing groups of signatures from transferable or non-transferable #identifiers #""" #def __init__(self, pather, cigars=None, sigers=None, tsgs=None): #self.pather = pather #self.cigars = cigars if cigars is not None else [] #self.sigers = sigers if sigers is not None else [] #self.tsgs = tsgs if tsgs is not None else [] #def transpose(self, pather): #""" Transpose path for all signatures in group #Parameters: #pather: #""" #self.pather = self.pather.root(pather) #@property #def proof(self): ## Transpose the signaturees to point to the new location #sadsigers = [] #if len(self.sigers) > 0: # iterate over each tsg #sadsigers.append((self.pather, self.sigers)) #sadtsgs = [] #for prefixer, seqner, diger, sigers in self.tsgs: # iterate over each tsg #sadtsgs.append((self.pather, prefixer, seqner, diger, sigers)) #sadcigars = [] #for cigar in self.cigars: #sadcigars.append((self.pather, cigar)) #return eventing.proofize(sadsigers=sadsigers, sadcigars=sadcigars, sadtsgs=sadtsgs)