Skip to content

Instantly share code, notes, and snippets.

@brunocalza
Created September 19, 2024 21:12
Show Gist options
  • Save brunocalza/cb352b210c9c5ae031317e9e6c483da0 to your computer and use it in GitHub Desktop.
Save brunocalza/cb352b210c9c5ae031317e9e6c483da0 to your computer and use it in GitHub Desktop.
Example of Identity-Based Encryption in Go
package main
import (
"fmt"
"log"
"v.io/x/lib/ibe"
)
const ID = "[email protected]"
func main() {
master_key, err := setup()
if err != nil {
log.Fatal(err)
}
ciphertext, err := encrypt(master_key, "Hello World!")
if err != nil {
log.Fatal(err)
}
plaintext, err := decrypt(master_key, ciphertext)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(plaintext))
}
func setup() (ibe.Master, error) {
master_key, err := ibe.SetupBB2()
if err != nil {
return nil, err
}
return master_key, nil
}
func encrypt(master_key ibe.Master, msg string) ([]byte, error) {
ciphertext := make([]byte, len(msg)+master_key.Params().CiphertextOverhead())
if err := master_key.Params().Encrypt(ID, []byte(msg), ciphertext); err != nil {
return []byte{}, err
}
return ciphertext, nil
}
func decrypt(master_key ibe.Master, ciphertext []byte) ([]byte, error) {
private_key, err := master_key.Extract(ID)
if err != nil {
return []byte{}, err
}
plaintext := make([]byte, len(ciphertext)-master_key.Params().CiphertextOverhead())
if err := private_key.Decrypt(ciphertext, plaintext); err != nil {
return []byte{}, err
}
return plaintext, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment