Skip to content

Repository files navigation

goRecrypt

goRecrypt is a tool to execute proxy re-encryption algorithms. It offers a high-level API to easily implement the process of re-encryption.

Introduction and Theory

1

Prerequisites

2

Encrypt

3

ReKeyGen

4

ReEncryption

5

ReCreateKey

6

Decrypt

7

Getting started

Install

$ go get -v github.com/SherLzp/goRecrypt

Test

Code

package main
import (
"fmt""goRecrypt/curve""goRecrypt/recrypt"
)
funcmain() {
// Alice Generate Alice key-pairaPriKey, aPubKey, _:=curve.GenerateKeys()
// Bob Generate Bob key-pairbPriKey, bPubKey, _:=curve.GenerateKeys()
// plain textm:="Hello, Proxy Re-Encryption"fmt.Println("origin message:", m)
// Alice encrypts to get cipherText and capsulecipherText, capsule, err:=recrypt.Encrypt(m, aPubKey)
iferr!=nil {
fmt.Println(err)
}
capsuleAsBytes, err:=recrypt.EncodeCapsule(*capsule)
iferr!=nil {
fmt.Println("encode error:", err)
}
capsuleTest, err:=recrypt.DecodeCapsule(capsuleAsBytes)
iferr!=nil {
fmt.Println("decode error:", err)
}
fmt.Println("capsule before encode:", capsule)
fmt.Println("capsule after decode:", capsuleTest)
fmt.Println("ciphereText:", cipherText)
// Alice generates re-encryption keyrk, pubX, err:=recrypt.ReKeyGen(aPriKey, bPubKey)
iferr!=nil {
fmt.Println(err)
}
fmt.Println("rk:", rk)
// Server executes re-encryptnewCapsule, err:=recrypt.ReEncryption(rk, capsule)
iferr!=nil {
fmt.Println(err.Error())
}
// Bob decrypts the cipherTextplainText, err:=recrypt.Decrypt(bPriKey, newCapsule, pubX, cipherText)
iferr!=nil {
fmt.Println(err)
}
plainTextByMyPri, err:=recrypt.DecryptOnMyPriKey(aPriKey, capsule, cipherText)
iferr!=nil {
fmt.Println(err)
}
fmt.Println("PlainText by my own private key:", string(plainTextByMyPri))
// get plainTextfmt.Println("plainText:", string(plainText))
fileCapsule, err:=recrypt.EncryptFile("a.txt", "a_encrypt.txt", aPubKey)
iferr!=nil {
fmt.Println("File Encrypt Error:", err)
}
fileNewCapsule, err:=recrypt.ReEncryption(rk, fileCapsule)
iferr!=nil {
fmt.Println("ReEncryption Error:", err)
}
err=recrypt.DecryptFile("a_encrypt.txt", "a_decrypt.txt", bPriKey, fileNewCapsule, pubX)
iferr!=nil {
fmt.Println("Decrypt Error:", err)
}
}

Result

origin message: Hello, ProxyRe-Encryptioncapsulebeforeencode: &{0xc00006af600xc00006af9057148977540300415262115486025741185922481513775009103033079547516801934630957}
capsuleafterdecode: {0xc0000ea0c00xc0000ea44057148977540300415262115486025741185922481513775009103033079547516801934630957}
ciphereText: [86253121482855882829241021542077418622838187250136195231551373414329145161117217125227233436318221866181217102]
rk: 102993116644991623703962027935370616042568913513173132988315879311078971457909PlainTextbymyownprivatekey: Hello, ProxyRe-EncryptionplainText: Hello, ProxyRe-Encryption

Thanks!

About

Proxy Re-Encryption

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages