Monday 13 May 2024

Open ssl how to create and verify signature, also how to use go lang to verify

create private key:

openssl genpkey -algorithm RSA -out private_key.pem

 

create signature with prviate key:

openssl dgst -sha256 -sign private_key.pem -out file.sig data_to_sign.txt


verify signature with public key:
openssl dgst -sha256 -verify public_key.pem -signature file.sig data_to_sign.txt


simple golang function to do the above:
package main

import (
    "fmt"
    "os/exec"
)

func verifySignature(publicKeyFile, signatureFile, dataFile string) error {
    cmd := exec.Command("openssl", "dgst", "-sha256", "-verify", publicKeyFile, "-signature", signatureFile, dataFile)
    out, err := cmd.CombinedOutput()
    if err != nil {
        return fmt.Errorf("error verifying signature: %v\nOutput: %s", err, out)
    }
    // Check if the output contains "OK"
    if bytes.Contains(out, []byte("OK")) {
        return true, nil
    }
    // If "OK" is not found in the output, return false
    return false, nil

    fmt.Println("Signature verification result:", string(out))
    return nil
}

func main() {
    publicKeyFile := "public_key.pem"
    signatureFile := "file.sig"
    dataFile := "data_to_verify.txt"

    if err := verifySignature(publicKeyFile, signatureFile, dataFile); err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println("Signature verification successful.")
}


No comments:

Post a Comment