Crypto

The built-in contract Crypto can be used to perform cryptographic operations. The contract can be imported using import Crypto.

For example, to verify two signatures with equal weights for some signed data:

import Crypto

pub fun test main() {
    let keyList = Crypto.KeyList()

    let publicKeyA = Crypto.PublicKey(
        publicKey:
            "db04940e18ec414664ccfd31d5d2d4ece3985acb8cb17a2025b2f1673427267968e52e2bbf3599059649d4b2cce98fdb8a3048e68abf5abe3e710129e90696ca".decodeHex(),
        signatureAlgorithm: Crypto.ECDSA_P256
    )
    keyList.add(
        publicKeyA,
        hashAlgorithm: Crypto.SHA3_256,
        weight: 0.5
    )

    let publicKeyB = Crypto.PublicKey(
        publicKey:
            "df9609ee588dd4a6f7789df8d56f03f545d4516f0c99b200d73b9a3afafc14de5d21a4fc7a2a2015719dc95c9e756cfa44f2a445151aaf42479e7120d83df956".decodeHex(),
        signatureAlgorithm: Crypto.ECDSA_P256
    )
    keyList.add(
        publicKeyB,
        hashAlgorithm: Crypto.SHA3_256,
        weight: 0.5
    )

    let signatureSet = [
        Crypto.KeyListSignature(
            keyIndex: 0,
            signature:
                "8870a8cbe6f44932ba59e0d15a706214cc4ad2538deb12c0cf718d86f32c47765462a92ce2da15d4a29eb4e2b6fa05d08c7db5d5b2a2cd8c2cb98ded73da31f6".decodeHex()
        ),
        Crypto.KeyListSignature(
            keyIndex: 1,
            signature:
                "bbdc5591c3f937a730d4f6c0a6fde61a0a6ceaa531ccb367c3559335ab9734f4f2b9da8adbe371f1f7da913b5a3fdd96a871e04f078928ca89a83d841c72fadf".decodeHex()
        )
    ]

    // "foo", encoded as UTF-8, in hex representation
    let signedData = "666f6f".decodeHex()

    let isValid = keyList.isValid(
        signatureSet: signatureSet,
        signedData: signedData
    )
}

The API of the Crypto contract is:

Last updated

Was this helpful?