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