keys Usage

RSA Key Example

Generating RSA Public and Private Keys, Encrypting Data Using the OAEP Padding Mode of the Public Key, and Decrypting Data Using the OAEP Padding Mode of the Private Key

import crypto.keys.*
import crypto.digest.*
import std.io.*
import std.crypto.digest.*

main() {
    var rsaPri = RSAPrivateKey(2048)
    var rsaPub = RSAPublicKey(rsaPri)

    var str: String = "hello world, hello cangjie"
    var bas1 = ByteArrayStream()
    var bas2 = ByteArrayStream()
    var bas3 = ByteArrayStream()
    bas1.write(str.toArray())

    var encOpt = OAEPOption(SHA1(), SHA256())
    rsaPub.encrypt(bas1, bas2, padType: OAEP(encOpt))
    var encOpt2 = OAEPOption(SHA1(), SHA256())
    rsaPri.decrypt(bas2, bas3, padType: OAEP(encOpt2))

    var buf = Array<Byte>(str.size, item:0)
    bas3.read(buf)
    if (str.toArray() == buf){
        println("success")
    } else {
        println("fail")
    }
}

Running result:

success

Reading the RSA Public and Private Keys from a File, Using the PKCS1 Padding Mode of the Private Key for Signing, and Using the PKCS1 Padding Mode of the Public Key to Verify the Signature Result

Note: >

  • The public and private key files need to be prepared in advance.
import crypto.keys.*
import crypto.digest.*
import std.crypto.digest.*
import std.fs.*

main() {
    var pemPri = String.fromUtf8(File("./files/rsaPri.pem", OpenOption.Open(true, false)).readToEnd())
    var rsaPri = RSAPrivateKey.decodeFromPem(pemPri)

    var pemPub = String.fromUtf8(File("./files/rsaPub.pem", OpenOption.Open(true, false)).readToEnd())
    var rsaPub = RSAPublicKey.decodeFromPem(pemPub)

    var str: String = "helloworld"
    var sha512Instance = SHA512()
    var md: Array<Byte> = digest(sha512Instance, str)

    var sig = rsaPri.sign(sha512Instance, md, padType: PKCS1)
    if (rsaPub.verify(sha512Instance, md, sig, padType: PKCS1)){
        println("verify successful")
    }
}

Running result:

verify successful

ECDSA Key Example

ECDSA Key Usage Example

Generating ECDSA Public and Private Keys, Using the Private Key for Signing, and Using the Public Key to Verify the Signature Result

import crypto.keys.*
import crypto.digest.*
import std.convert.*
import std.crypto.digest.*

main() {
    var ecPri = ECDSAPrivateKey(P224)
    var ecPub = ECDSAPublicKey(ecPri)

    var str: String = "helloworld"
    var sha512Instance = SHA512()
    var md: Array<Byte> = digest(sha512Instance, str)

    var sig = ecPri.sign(md)
    println(sig)
    if (ecPub.verify(md, sig)){
        println("verify successful")
    }
}

Running result:

verify successful

SM2 Key Example

Generating SM2 Public and Private Keys, Using the Private Key for Signing, and Using the Public Key to Verify the Signature Result

main(): Unit {
    // Generates public and private keys without parameters.
    let sm2PrivateKey = SM2PrivateKey()
    let sm2PublicKey = SM2PublicKey(sm2PrivateKey)

    // Exports the public and private keys.
    let priPem = sm2PrivateKey.encodeToPem()
    let file1: File = File("./sm2Pri.pem", OpenOption.CreateOrTruncate(true))
    file1.write(priPem.encode().toArray())
    file1.close()

    let pubPem = sm2PublicKey.encodeToPem()
    let file2: File = File("./sm2Pub.pem", OpenOption.CreateOrTruncate(true))
    file2.write(pubPem.encode().toArray())
    file2.close()

    // Encrypts data using the public key and decrypts data using the private key.
    let str: String = "helloworld"
    let encresult = sm2PublicKey.encrypt(str.toArray())
    let decresult = sm2PrivateKey.decrypt(encresult)
    println(String.fromUtf8(decresult))

    // Performs signing using the private key and verifies the signature using the public key.
    let strSig: String = "helloworld"
    let sigRe = sm2PrivateKey.sign(strSig.toArray())
    let verifyre  = sm2PublicKey.verify(strSig.toArray(), sigRe)
    println(verifyre)

    //Imports the private and public keys.
    let pemPri = String.fromUtf8(File("./sm2Pri.pem", OpenOption.Open(true, false)).readToEnd())
    let sm2PrivateKeyNew = SM2PrivateKey.decodeFromPem(pemPri)
    let pemPub = String.fromUtf8(File("./sm2Pub.pem", OpenOption.Open(true, false)).readToEnd())
    let sm2PublicKeyNew = SM2PublicKey.decodeFromPem(pemPub)

    }

Running result:

helloworld
true