Skip to main content

Crypto RSA Signing and Verification in Golang

 






RSA [Rivest-shamir-Adleman] encryption is one of the most widely used algorithms for secure data encryption.

Signing and Verification: 

RSA works by generating form of key pair of private and public keys.
For Signing: 
we need to provide some inputs, 
  1. A random reader used for generating random bits because if we provide the same input, it doesn't give the same output as last time.
  2. Before signing, we need to hash our message.
  3. we also need to provide which hash function is used for message hashing.
  4. Finally, private key. 
For Verifying:
we need to provide some inputs, 
  1. hash of our message.
  2. which hash function is used for message hashing while signing.
  3. Finally, public key and signature what we obtained while signing. 
Example:
 package main
 import (
	"crypto"
	"crypto/rand"
	"crypto/rsa"
	"crypto/sha256"
	"encoding/hex"
	"fmt"
	"log"
 )
 func main() {
	privatekey, publickey := GenerateRsaKeys()
	message := "hello"
	hashedMessage := sha256.Sum256([]byte(message))
	signedBytes, err := rsa.SignPKCS1v15(rand.Reader, privatekey, crypto.SHA256, hashedMessage[:])
	if err != nil {
		fmt.Println("signing error using RSA keys")
		log.Fatal(err)
	}
	err = rsa.VerifyPKCS1v15(publickey, crypto.SHA256, hashedMessage[:], signedBytes)
	if err != nil {
		fmt.Println("signing error using RSA keys")
		log.Fatal(err)
	}
	fmt.Println("Message verified Successfully")
}

func GenerateRsaKeys() (*rsa.PrivateKey, *rsa.PublicKey) {
	privatekey, err := rsa.GenerateKey(rand.Reader, 4096)
	if err != nil {
		fmt.Println("cannot generate RSA keys")
		log.Fatal(err)
	}
	publicKey := &privatekey.PublicKey
	return privatekey, publicKey
}

Output:

Message verified Successfully

Comments

Popular posts from this blog

Ethereum Overview

Origin of Ethereum:  At Some point Blockchain technology became very popular. One Blockchain per Application. It's very difficult to create our own blockchain for every new applications. Ethereum concept came here, it's aim to create a single blockchain for that will allow to create any kind of new applications on top of it.   History of Ethereum: 2013 - Ethereum whitepaper by Vitalik buterin   2014 - Ethereum Development 2015 - Olympic Release Eth network was created 2020 - Boom in DeFi Activities 2022 - The Merge Upgrade of Execution layer Overview: Ethereum Projects: AUGUR - Prediction Market OPENSEA - digital collectibles UNISWAP - Assets Exchange COMPOUND - Leading platform Decentralized Application : Ethereum allows us to build new applications called Decentralized Applications . Just as regular applications, they run on multiple machines. But what differs them is that these machines are not owned by single group or organization. They are owned by different people in diff

Crypto ED25519 Signing and Verifying using Golang

The Edwards-curve Digital Signature Algorithm (ECDSA) is used to create a digital signature using an enhancement of the Schnorr signature with Twisted Edwards curves. Overall it is faster that many other digital signature methods, and is strong for security. One example of ECDSA is Ed25519, and which is based on Curve 25519. It generates a 64-byte signature value of (R,s), and has 32-byte values for the public and the private keys. Example : package main import ( "crypto/ed25519" "crypto/rand" "encoding/hex" "fmt" "log" ) func main() { publickey, privatekey, err := ed25519.GenerateKey(rand.Reader) if err != nil { fmt.Println("cannot generate ecdsa keys") log.Fatal(err) } msg := "hello" signedBytes := ed25519.Sign(privatekey, []byte(msg)) fmt.Println("Signed Message :", hex.EncodeToString(signedBytes)) if !ed25519.Verify(publickey, []byte(msg), signedBytes) { fmt.Println("ver