78 lines
2.2 KiB
Go
78 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"C"
|
|
"encoding/hex"
|
|
"github.com/lbryio/lbryschema.go/address"
|
|
"github.com/lbryio/lbryschema.go/claim"
|
|
)
|
|
|
|
//export VerifySignature
|
|
func VerifySignature(claimHex string, certificateHex string, claimAddress string, certificateId string, blockchainName string) bool {
|
|
decodedClaim, err := claim.DecodeClaimHex(claimHex, blockchainName)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
decodedCertificate, err := claim.DecodeClaimHex(certificateHex, blockchainName)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
result, err := decodedClaim.ValidateClaimSignature(decodedCertificate, claimAddress, certificateId, blockchainName)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return result
|
|
}
|
|
|
|
//export DecodeClaimHex
|
|
func DecodeClaimHex(claimHex string, blockchainName string) *C.char {
|
|
decodedClaim, err := claim.DecodeClaimHex(claimHex, blockchainName)
|
|
if err != nil {
|
|
return C.CString("decode error: " + err.Error())
|
|
}
|
|
decoded, err := decodedClaim.RenderJSON()
|
|
if err != nil {
|
|
return C.CString("encode error: " + err.Error())
|
|
}
|
|
return C.CString(decoded)
|
|
}
|
|
|
|
//export SerializeClaimFromJSON
|
|
func SerializeClaimFromJSON(claimJSON string, blockchainName string) *C.char {
|
|
decodedClaim, err := claim.DecodeClaimJSON(claimJSON, blockchainName)
|
|
if err != nil {
|
|
return C.CString("decode error: " + err.Error())
|
|
}
|
|
SerializedHex, err := decodedClaim.SerializedHexString()
|
|
if err != nil {
|
|
return C.CString("encode error: " + err.Error())
|
|
}
|
|
return C.CString(SerializedHex)
|
|
}
|
|
|
|
//export DecodeAddress
|
|
func DecodeAddress(addressString string, blockchainName string) *C.char {
|
|
addressBytes, err := address.DecodeAddress(addressString, blockchainName)
|
|
if err != nil {
|
|
return C.CString("error: " + err.Error())
|
|
}
|
|
return C.CString(hex.EncodeToString(addressBytes[:]))
|
|
}
|
|
|
|
//export EncodeAddress
|
|
func EncodeAddress(addressChars string, blockchainName string) *C.char {
|
|
addressBytes := [25]byte{}
|
|
if len(addressChars) != 25 {
|
|
return C.CString("error: address is not 25 bytes")
|
|
}
|
|
for i := range addressBytes {
|
|
addressBytes[i] = byte(addressChars[i])
|
|
}
|
|
encodedAddress, err := address.EncodeAddress(addressBytes, blockchainName)
|
|
if err != nil {
|
|
return C.CString("error: " + err.Error())
|
|
}
|
|
return C.CString(encodedAddress)
|
|
}
|
|
|
|
func main() {}
|