Git Product home page Git Product logo

Comments (7)

lucy-sha512 avatar lucy-sha512 commented on May 24, 2024

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.

lucy-sha512 avatar lucy-sha512 commented on May 24, 2024

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.

markkurossi avatar markkurossi commented on May 24, 2024

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.

lucy-sha512 avatar lucy-sha512 commented on May 24, 2024

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.

xomexh avatar xomexh commented on May 24, 2024

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.

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.

markkurossi avatar markkurossi commented on May 24, 2024

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.

xomexh avatar xomexh commented on May 24, 2024

Hi Mark, a recent pull and build solved my errors. Thank you so much!

from mpc.

Related Issues (10)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.