Exemple #1
0
def createGenesisBlock(context, chainId, networkConfigPolicy, consensusType):
    'Generates the genesis block for starting the oderers and for use in the chain config transaction by peers'
    #assert not "bootstrapGenesisBlock" in context,"Genesis block already created:\n{0}".format(context.bootstrapGenesisBlock)
    directory = getDirectory(context)
    assert len(
        directory.ordererAdminTuples) > 0, "No orderer admin tuples defined!!!"

    bootstrapHelper = BootstrapHelper(chainId=chainId,
                                      consensusType=consensusType)
    configItems = []
    configItems.append(bootstrapHelper.encodeBatchSize())
    configItems.append(bootstrapHelper.encodeConsensusType())
    configItems.append(bootstrapHelper.encodeChainCreators())
    configItems.append(bootstrapHelper.encodeAcceptAllPolicy())
    configItems.append(bootstrapHelper.lockDefaultModificationPolicy())
    configEnvelope = common_dot_configuration_pb2.ConfigurationEnvelope(
        Items=configItems)

    payloadChainHeader = bootstrapHelper.makeChainHeader(
        type=common_dot_common_pb2.HeaderType.Value(
            "CONFIGURATION_TRANSACTION"))

    #Now the SignatureHeader
    serializedCreatorCertChain = None
    nonce = None
    payloadSignatureHeader = common_dot_common_pb2.SignatureHeader(
        creator=serializedCreatorCertChain,
        nonce=bootstrapHelper.getNonce(),
    )

    payloadHeader = common_dot_common_pb2.Header(
        chainHeader=payloadChainHeader,
        signatureHeader=payloadSignatureHeader,
    )
    payload = common_dot_common_pb2.Payload(
        header=payloadHeader, data=configEnvelope.SerializeToString())
    envelope = common_dot_common_pb2.Envelope(
        payload=payload.SerializeToString(), signature=None)

    blockData = common_dot_common_pb2.BlockData(
        Data=[envelope.SerializeToString()])

    block = common_dot_common_pb2.Block(
        Header=common_dot_common_pb2.BlockHeader(
            Number=0,
            PreviousHash=None,
            DataHash=bootstrapHelper.computeBlockDataHash(blockData),
        ),
        Data=blockData,
        Metadata=None,
    )

    # Add this back once crypto certs are required
    for nodeAdminTuple in directory.ordererAdminTuples:
        userCert = directory.ordererAdminTuples[nodeAdminTuple]
        certAsPEM = crypto.dump_certificate(crypto.FILETYPE_PEM, userCert)
        # print("UserCert for orderer genesis:\n{0}\n".format(certAsPEM))
        # print("")

    return block
Exemple #2
0
class BootstrapHelper:
    KEY_CONSENSUS_TYPE = "ConsensusType"
    KEY_CHAIN_CREATION_POLICY_NAMES = "ChainCreationPolicyNames"
    KEY_ACCEPT_ALL_POLICY = "AcceptAllPolicy"
    KEY_INGRESS_POLICY = "IngressPolicyNames"
    KEY_EGRESS_POLICY = "EgressPolicyNames"
    KEY_HASHING_ALGORITHM = "HashingAlgorithm"
    KEY_BATCH_SIZE = "BatchSize"
    KEY_BATCH_TIMEOUT = "BatchTimeout"
    KEY_CREATIONPOLICY = "CreationPolicy"
    KEY_MSP_INFO = "MSP"
    KEY_ANCHOR_PEERS = "AnchorPeers"

    KEY_NEW_CONFIGURATION_ITEM_POLICY = "NewConfigurationItemPolicy"
    DEFAULT_CHAIN_CREATORS = [KEY_ACCEPT_ALL_POLICY]

    DEFAULT_NONCE_SIZE = 24

    def __init__(self,
                 chainId="TestChain",
                 lastModified=0,
                 msgVersion=1,
                 epoch=0,
                 consensusType="solo",
                 batchSize=10,
                 batchTimeout="10s",
                 absoluteMaxBytes=100000000,
                 preferredMaxBytes=512 * 1024,
                 signers=[]):
        self.chainId = str(chainId)
        self.lastModified = lastModified
        self.msgVersion = msgVersion
        self.epoch = epoch
        self.consensusType = consensusType
        self.batchSize = batchSize
        self.batchTimeout = batchTimeout
        self.absoluteMaxBytes = absoluteMaxBytes
        self.preferredMaxBytes = preferredMaxBytes
        self.signers = signers

    @classmethod
    def getNonce(cls):
        return rand.bytes(BootstrapHelper.DEFAULT_NONCE_SIZE)

    @classmethod
    def addSignatureToSignedConfigItem(cls, signedConfigItem, (entity, cert)):
        sigHeader = common_dot_common_pb2.SignatureHeader(
            creator=crypto.dump_certificate(crypto.FILETYPE_ASN1, cert),
            nonce=BootstrapHelper.getNonce())
        sigHeaderBytes = sigHeader.SerializeToString()
        # Signature over the concatenation of configurationItem bytes and signatureHeader bytes
        signature = entity.sign(signedConfigItem.ConfigurationItem +
                                sigHeaderBytes)
        # Now add new signature to Signatures repeated field
        newConfigSig = signedConfigItem.Signatures.add()
        newConfigSig.signatureHeader = sigHeaderBytes
        newConfigSig.signature = signature
def _testAccessPBMethods():
    channel_header = common_pb2.ChannelHeader(channel_id=TEST_CHAIN_ID,
                                              type=common_pb2.ENDORSER_TRANSACTION)
    header = common_pb2.Header(channel_header=channel_header.SerializeToString(),
                               signature_header=common_pb2.SignatureHeader().SerializeToString())
    payload = common_pb2.Payload(header=header,
                                 data="Functional test: {0}".format(datetime.datetime.utcnow()))
    envelope = common_pb2.Envelope(payload=payload.SerializeToString())
    return envelope
Exemple #4
0
def generateMessageEnvelope():
    channel_header = common_pb2.ChannelHeader(channel_id=endorser_util.TEST_CHANNEL_ID,
                                              type=common_pb2.ENDORSER_TRANSACTION)
    header = common_pb2.Header(channel_header=channel_header.SerializeToString(),
                               signature_header=common_pb2.SignatureHeader().SerializeToString())
    payload = common_pb2.Payload(header=header,
                                 data=str.encode("Functional test: {0}".format(datetime.datetime.utcnow())) )
    envelope = common_pb2.Envelope(payload=payload.SerializeToString())
    return envelope
def _defaultDataFunction(index):
    payload = common_pb2.Payload(
        header=common_pb2.Header(
            chainHeader=common_pb2.ChainHeader(
                chainID=TEST_CHAIN_ID,
                type=common_pb2.ENDORSER_TRANSACTION,
            ),
            signatureHeader=common_pb2.SignatureHeader(),
        ),
        data=str("BDD test: {0}".format(datetime.datetime.utcnow())),
    )
    envelope = common_pb2.Envelope(payload=payload.SerializeToString())
    return envelope
Exemple #6
0
def createSeekInfo(chainID = TEST_CHAIN_ID, start = 'Oldest', end = 'Newest',  behavior = 'FAIL_IF_NOT_READY'):
    return common_pb2.Envelope(
        payload = common_pb2.Payload(
            header = common_pb2.Header(
                channel_header = common_pb2.ChannelHeader( channel_id = chainID ).SerializeToString(),
                signature_header = common_pb2.SignatureHeader().SerializeToString(),
            ),
            data = ab_pb2.SeekInfo(
                start = seekPosition(start),
                stop = seekPosition(end),
                behavior = ab_pb2.SeekInfo.SeekBehavior.Value(behavior),
            ).SerializeToString(),
        ).SerializeToString(),
    )
Exemple #7
0
class BootstrapHelper:
    KEY_CONSENSUS_TYPE = "ConsensusType"
    KEY_CHAIN_CREATORS = "ChainCreators"
    KEY_ACCEPT_ALL_POLICY = "AcceptAllPolicy"
    KEY_INGRESS_POLICY = "IngressPolicy"
    KEY_EGRESS_POLICY = "EgressPolicy"
    KEY_BATCH_SIZE = "BatchSize"
    KEY_CREATIONPOLICY = "CreationPolicy"

    DEFAULT_MODIFICATION_POLICY_ID = "DefaultModificationPolicy"
    DEFAULT_CHAIN_CREATORS = [KEY_ACCEPT_ALL_POLICY]

    DEFAULT_NONCE_SIZE = 24

    def __init__(self,
                 chainId="TestChain",
                 lastModified=0,
                 msgVersion=1,
                 epoch=0,
                 consensusType="solo",
                 batchSize=10,
                 absoluteMaxBytes=100000000,
                 signers=[]):
        self.chainId = str(chainId)
        self.lastModified = lastModified
        self.msgVersion = msgVersion
        self.epoch = epoch
        self.consensusType = consensusType
        self.batchSize = batchSize
        self.absoluteMaxBytes = absoluteMaxBytes
        self.signers = signers

    @classmethod
    def getNonce(cls):
        return rand.bytes(BootstrapHelper.DEFAULT_NONCE_SIZE)

    @classmethod
    def addSignatureToSignedConfigItem(cls, signedConfigItem, (signingKey,
                                                               cert)):
        sigHeader = common_dot_common_pb2.SignatureHeader(
            creator=crypto.dump_certificate(crypto.FILETYPE_ASN1, cert),
            nonce=BootstrapHelper.getNonce())
        sigHeaderBytes = sigHeader.SerializeToString()
        # Signature over the concatenation of configurationItem bytes and signatureHeader bytes
        signature = signingKey.sign(signedConfigItem.ConfigurationItem +
                                    sigHeaderBytes)
        # Now add new signature to Signatures repeated field
        newConfigSig = signedConfigItem.Signatures.add()
        newConfigSig.signatureHeader = sigHeaderBytes
        newConfigSig.signature = signature
Exemple #8
0
def createConfigTxEnvelope(chainId, signedConfigEnvelope):
    bootstrapHelper = BootstrapHelper(chainId=chainId)
    payloadChainHeader = bootstrapHelper.makeChainHeader(
        type=common_dot_common_pb2.HeaderType.Value(
            "CONFIGURATION_TRANSACTION"))

    #Now the SignatureHeader
    serializedCreatorCertChain = None
    nonce = None
    payloadSignatureHeader = common_dot_common_pb2.SignatureHeader(
        creator=serializedCreatorCertChain,
        nonce=bootstrapHelper.getNonce(),
    )

    payloadHeader = common_dot_common_pb2.Header(
        chainHeader=payloadChainHeader,
        signatureHeader=payloadSignatureHeader,
    )
    payload = common_dot_common_pb2.Payload(
        header=payloadHeader, data=signedConfigEnvelope.SerializeToString())
    envelope = common_dot_common_pb2.Envelope(
        payload=payload.SerializeToString(), signature=None)
    return envelope
Exemple #9
0
 def makeSignatureHeader(self, serializeCertChain, nonce):
     return common_dot_common_pb2.SignatureHeader(
         creator=serializeCertChain, nonce=nonce)