Comments (7)
I figured out the stringSize type and tried to run the following code as a test:
package main
import (
"crypto/hmac"
)
type Garbler struct {
msg [32]byte
keyShare [64]byte
}
func main(g Garbler, eKeyShare [64]byte) []byte {
var key [64]byte
for i := 0; i < len(key); i++ {
key[i] = g.keyShare[i] ^ eKeyShare[i]
}
byteArray := []byte{0x48, 0x65, 0x6C, 0x6C, 0x6F} // Example byte array
var hexString string10
for i:=0; i < len(byteArray); i++ {
hexString += byteToHexString(byteArray[i])
}
return hmac.SumSHA256(g.msg, key)
}
func byteToHexString(b byte) string {
hexChars := "0123456789ABCDEF"
high := b >> 4
low := b & 0x0F
return string(hexChars[high]) + string(hexChars[low])
}
but it throws an exception
./garbled -e -v -i 0xf87a00ef89c2396de32f6ac0748f6fa1b641013d46f74ce25cc625904215a67501c0c7196a2602f6516527958a82271847933c35d170d98bfdb04d2ddf3bb197 examples/hmac-sha256.mpcl
Listening for connections at :8080
New connection from 127.0.0.1:54384
found PkgRoot from '/home/lucy/go/src/github.com/markkurossi/mpc/pkg'
looking for package hmac (crypto/hmac)
- parsing @/crypto/hmac/doc.mpcl
- parsing @/crypto/hmac/sha512.mpcl
looking for package sha512 (crypto/sha512)
- parsing @/crypto/sha512/sum.mpcl
- parsing @/crypto/hmac/sha256.mpcl
looking for package sha256 (crypto/sha256)
- parsing @/crypto/sha256/sum.mpcl
Initializing main
Initializing hmac
Initializing sha512
Initializing sha256
panic: v.Type.Bits == 0: $""
goroutine 1 [running]:
github.com/markkurossi/mpc/compiler/ssa.Value.Check({{0xc000381adb, 0x3}, 0x568, 0x0, 0x1, 0x0, 0x0, {0x0, 0x5, 0x0, ...}, ...})
/home/lucy/go/src/github.com/markkurossi/mpc/compiler/ssa/value.go:68 +0x85
github.com/markkurossi/mpc/compiler/ssa.Instr.Check(...)
/home/lucy/go/src/github.com/markkurossi/mpc/compiler/ssa/instructions.go:162
github.com/markkurossi/mpc/compiler/ssa.(*Block).AddInstr(...)
/home/lucy/go/src/github.com/markkurossi/mpc/compiler/ssa/block.go:79
github.com/markkurossi/mpc/compiler/ast.(*VariableDef).SSA(0xc0000b50a0, 0xc0000fc9a0, 0xc0000b5e30, 0xc0000f7920)
/home/lucy/go/src/github.com/markkurossi/mpc/compiler/ast/ssagen.go:205 +0x1238
github.com/markkurossi/mpc/compiler/ast.List.SSA({0xc00002c800?, 0x7, 0x1000000000014?}, 0x0?, 0xc0000b5e30, 0x0?)
/home/lucy/go/src/github.com/markkurossi/mpc/compiler/ast/ssagen.go:39 +0x95
github.com/markkurossi/mpc/compiler/ast.(*Func).SSA(0xc00009e9c0, 0xc0000fc9a0, 0xc0000b5e30, 0x0?)
/home/lucy/go/src/github.com/markkurossi/mpc/compiler/ast/ssagen.go:74 +0x6c7
github.com/markkurossi/mpc/compiler/ast.(*Package).Compile(0xc0000a08c0, 0xc0000b5e30)
/home/lucy/go/src/github.com/markkurossi/mpc/compiler/ast/package.go:110 +0xc85
github.com/markkurossi/mpc/compiler.(*Compiler).compile(0xc00007c700, {0x7fff1a48129a, 0x19}, {0x6d02e0, 0xc0000600b8}, {0xc0000f6090, 0x2, 0x2})
/home/lucy/go/src/github.com/markkurossi/mpc/compiler/compiler.go:85 +0x2e5
github.com/markkurossi/mpc/compiler.(*Compiler).CompileFile(0x0?, {0x7fff1a48129a, 0x19}, {0xc0000f6090, 0x2, 0x2})
/home/lucy/go/src/github.com/markkurossi/mpc/compiler/compiler.go:60 +0x145
main.loadCircuit({0x7fff1a48129a, 0x19}, 0xc0000fa000, {0xc0000f6090, 0x2, 0x2})
/home/lucy/go/src/github.com/markkurossi/mpc/apps/garbled/main.go:163 +0x252
main.evaluatorMode({0x6d10d8, 0xc000092320}, {0x7fff1a48129a, 0x19}, 0x66e639?, 0x0)
/home/lucy/go/src/github.com/markkurossi/mpc/apps/garbled/main.go:260 +0x4e5
main.main()
/home/lucy/go/src/github.com/markkurossi/mpc/apps/garbled/main.go:142 +0x89f
Can you guide why this happens?
from mpc.
I want to import golang package like "fmt" and "hex/encoding" but it throws this error:
found PkgRoot from '/home/lucy/go/src/github.com/markkurossi/mpc/pkg'
looking for package hmac (crypto/hmac)
- parsing @/crypto/hmac/doc.mpcl
- parsing @/crypto/hmac/sha512.mpcl
looking for package sha512 (crypto/sha512)
- parsing @/crypto/sha512/sum.mpcl
- parsing @/crypto/hmac/sha256.mpcl
looking for package sha256 (crypto/sha256)
- parsing @/crypto/sha256/sum.mpcl
looking for package hex (encoding/hex)
package encoding/hex not found
Any way to fix this?
from mpc.
The string support is still very limited. I implemented cast operation from []byte to string string([]byte)
so now it is possible to convert from bytes to strings and vice versa. I also created encoding/hex
package that implements EncodeToString(src []byte) string
function.
The fmt
package is not currently supported. All supported packages can be found from the pkg
directory from the root of the repository.
from mpc.
Thank you for your input. I guess the message is also handled in form of hex bytes.
We want to have the message in form of utf encoding . We are using this library to fetch API response from a server. According to it, the message string is encoded in utf:
mac = hmac.new(bytes(secret_key, encoding='utf8'), bytes(message, encoding='utf-8'), digestmod='sha256')
from mpc.
The string support is still very limited. I implemented cast operation from []byte to string
string([]byte)
so now it is possible to convert from bytes to strings and vice versa. I also createdencoding/hex
package that implementsEncodeToString(src []byte) string
function.The
fmt
package is not currently supported. All supported packages can be found from thepkg
directory from the root of the repository.
Hi, I'm trying to cast the msg param of Garbler struct, into string, but it does not seem to be working.
Modified examples/hmac-sha256.mpcl file
type Garbler struct {
msg [43]byte,
keyShare [64]byte
}
func main(g Garbler, eKeyShare [64]byte) []byte {
var key [64]byte
for i := 0; i < len(key); i++ {
key[i] = g.keyShare[i] ^ eKeyShare[i]
}
hexBytes := make([]byte, len(key)*2)
var b byte
var hexChars [64]byte
for i := 0; i < len(key); i++ {
b = key[i]
hexChars = byteToHexString(b)
hexBytes[i*2] = hexChars[0]
hexBytes[i*2+1] = hexChars[1]
}
hexString := string512(hexBytes)
mType := make([]byte, size(hexString)/8)
for i := 0; i < len(hexString) ; i++ {
mType[i] = hexString[i]
}
resultString := string344(g.msg)
sType := make([]byte, size(resultString)/8)
for i := 0; i < len(resultString) ; i++ {
sType[i] = resultString[i]
}
return hmac.SumSHA256(sType, mType)
}
func byteToHexString(b byte) []byte {
hexChars := []byte("0123456789abcdef")
high := b >> 4
low := b & 0x0F
result := make([]byte, 2)
result[0] = hexChars[high]
result[1] = hexChars[low]
return result
}
These changes yield the proper HMAC Key for me.
However, as I want to make the msg field dynamic, i.e msg []bytes
I encounter this error:
Initializing hmac
Initializing sha256
Initializing sha512
panic: v.Type.Bits == 0: %_{0,835}arr
goroutine 1 [running]:
github.com/markkurossi/mpc/compiler/ssa.Value.Check({{0x100979202, 0x2}, 0x1cb5, 0x0, 0x0, 0x0, 0x343, {0x0, 0x7, 0x0, ...}, ...})
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ssa/value.go:68 +0x8c
github.com/markkurossi/mpc/compiler/ssa.Instr.Check(...)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ssa/instructions.go:162
github.com/markkurossi/mpc/compiler/ssa.(*Block).AddInstr(...)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ssa/block.go:79
github.com/markkurossi/mpc/compiler/ast.(*Call).SSA(0x140001cae00, 0x14000479420, 0x14000420540, 0x140003f38c0)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ast/ssagen.go:681 +0x1084
github.com/markkurossi/mpc/compiler/ast.(*Assign).SSA(0x140001a7020, 0x14000479420?, 0x14000420540, 0x140003f38c0)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ast/ssagen.go:261 +0x430
github.com/markkurossi/mpc/compiler/ast.List.SSA({0x140001ec700?, 0xe, 0x1000000000049?}, 0x0?, 0x14000420540, 0x0?)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ast/ssagen.go:39 +0x8c
github.com/markkurossi/mpc/compiler/ast.(*Func).SSA(0x14000196dd0, 0x14000247180, 0x14000420540, 0x0?)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ast/ssagen.go:74 +0x588
github.com/markkurossi/mpc/compiler/ast.(*Package).Compile(0x14000198960, 0x14000420540)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ast/package.go:110 +0xa18
github.com/markkurossi/mpc/compiler.(*Compiler).compile(0x140001c2700, {0x16f663524, 0x19}, {0x100a46740, 0x140001920a0}, {0x140002060f0, 0x2, 0x2})
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/compiler.go:85 +0x260
github.com/markkurossi/mpc/compiler.(*Compiler).CompileFile(0x140001d1be8?, {0x16f663524, 0x19}, {0x140002060f0, 0x2, 0x2})
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/compiler.go:60 +0xf0
main.loadCircuit({0x16f663524, 0x19}, 0x1400020c000, {0x140002060f0, 0x2, 0x2})
/Users/soms/go/src/github.com/markkurossi/mpc/apps/garbled/main.go:163 +0x1e8
main.garblerMode({0x100a47580, 0x140001ae320}, {0x16f663524, 0x19}, 0x100985a32?)
/Users/soms/go/src/github.com/markkurossi/mpc/apps/garbled/main.go:322 +0x29c
main.main()
/Users/soms/go/src/github.com/markkurossi/mpc/apps/garbled/main.go:144 +0x800
I have tried changing msg [43]bytes
and resultString := string344(g.msg)
to msg []bytes
and resultString := string(g.msg)
, however I face the error
Initializing hmac
Initializing sha256
Initializing sha512
Initializing hex
panic: v.Type.Bits == 0: %_{0,835}arr
goroutine 1 [running]:
github.com/markkurossi/mpc/compiler/ssa.Value.Check({{0x102fad202, 0x2}, 0x1cb5, 0x0, 0x0, 0x0, 0x343, {0x0, 0x7, 0x0, ...}, ...})
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ssa/value.go:68 +0x8c
github.com/markkurossi/mpc/compiler/ssa.Instr.Check(...)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ssa/instructions.go:162
github.com/markkurossi/mpc/compiler/ssa.(*Block).AddInstr(...)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ssa/block.go:79
github.com/markkurossi/mpc/compiler/ast.(*Call).SSA(0x14000078e40, 0x1400038b880, 0x14000364540, 0x140003318c0)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ast/ssagen.go:681 +0x1084
github.com/markkurossi/mpc/compiler/ast.(*Assign).SSA(0x1400007b080, 0x1400038b880?, 0x14000364540, 0x140003318c0)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ast/ssagen.go:261 +0x430
github.com/markkurossi/mpc/compiler/ast.List.SSA({0x14000148700?, 0xe, 0x1000000000049?}, 0x0?, 0x14000364540, 0x0?)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ast/ssagen.go:39 +0x8c
github.com/markkurossi/mpc/compiler/ast.(*Func).SSA(0x1400007ed00, 0x14000177180, 0x14000364540, 0x0?)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ast/ssagen.go:74 +0x588
github.com/markkurossi/mpc/compiler/ast.(*Package).Compile(0x14000108960, 0x14000364540)
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/ast/package.go:110 +0xa18
github.com/markkurossi/mpc/compiler.(*Compiler).compile(0x1400006e720, {0x16d02f524, 0x19}, {0x10307a740, 0x140000520b0}, {0x140001600f0, 0x2, 0x2})
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/compiler.go:85 +0x260
github.com/markkurossi/mpc/compiler.(*Compiler).CompileFile(0x14000131be8?, {0x16d02f524, 0x19}, {0x140001600f0, 0x2, 0x2})
/Users/soms/go/src/github.com/markkurossi/mpc/compiler/compiler.go:60 +0xf0
main.loadCircuit({0x16d02f524, 0x19}, 0x14000164000, {0x140001600f0, 0x2, 0x2})
/Users/soms/go/src/github.com/markkurossi/mpc/apps/garbled/main.go:163 +0x1e8
main.garblerMode({0x10307b580, 0x14000012410}, {0x16d02f524, 0x19}, 0x102fb9a32?)
/Users/soms/go/src/github.com/markkurossi/mpc/apps/garbled/main.go:322 +0x29c
main.main()
/Users/soms/go/src/github.com/markkurossi/mpc/apps/garbled/main.go:144 +0x800
Could you give insights on how I can make the message field dynamic accordingly?
from mpc.
There has been quite many changes in the string type and type conversions lately. Could you please pull the latest version and test if the problem still persists. I tried you example on top of the master and it seems to work - but it always Works for Me(TM) :)
from mpc.
Hi Mark, a recent pull and build solved my errors. Thank you so much!
from mpc.
Related Issues (10)
- Help: possible to scale? HOT 1
- support more mpc protocols
- `p2p.Conn.Stats` is not goroutine safe HOT 1
- How to run HMAC ? HOT 6
- In hmac hmacsha-256.mpcl the generated result is not same as the one genearted online using same credentials HOT 1
- help: Possible to implement 3 party MPC? HOT 2
- undefined variable 'break'
- Why the evaluator can use the original boolean circuit? HOT 1
- How to run 3party example curcuit? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mpc.