From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <4A719822.2050703@maht0x0r.net> Date: Thu, 30 Jul 2009 13:54:58 +0100 From: maht User-Agent: Thunderbird 2.0.0.19 (Windows/20081209) MIME-Version: 1.0 To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net> Content-Type: multipart/mixed; boundary="------------080709000201090006090900" Subject: [9fans] [limbo] I tried keyring, but it was the wrong number Topicbox-Message-UUID: 31ff5eba-ead5-11e9-9d60-3106f5b1d025 This is a multi-part message in MIME format. --------------080709000201090006090900 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi, sorry for this cross posting, I posted it to inferno yesterday but I'm not getting through (non of my mail is, must work that out) I've been trying to sign some data with a generated secret using the attached Limbo. Afaik the secret is ok, it passed checkSK in keyring.c I got as far as here with the debugging, I don't know how to work out which function is being called /usr/local/inferno-os/libinterp/keyring.c:999 c->signa = (*sa->vec->sign)(b, sk->key); running : % sign_test < secret [$Keyring] Broken: "mpdiv: divide by zero" sh: 5 "$Keyring":mpdiv: divide by zero ; stack 5 unknown fn() Module $Keyring PC 1445847206 unknown fn() Module ./sign_test.dis PC 42 externalexec() sh.b:919.2, 30 --------------080709000201090006090900 Content-Type: text/plain; name="secret" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="secret" cnNhCm1haHQKbDd3NHVKeWwrVWxDNnk0Y0cvdEdZYUtSY2I1ZXAxaWdSdmxmdW14ajNhRUJE SHUxdktac21NbUh6SEdDUVpsMUI5TWxBZFkrcGFDb05xUCtJbjFuQ2NZZG45Uzl6SUJBQ3o5 VExYSWs5eEdDS0todlB3NXJsZ1N3UE9FS1ZjSzdPL2t2TWhaVU9QS20rV29lZmd4OUhhZW5X WDJDcXpVcjU2ajhrRnlaY04xQXg1L3pNenpFNGQyNm1IaXBHT1pkV3RtaklhZDgvdllRVzlk bE9FMVU1SkNLVlF6bHlyY2x6VGRZelo3Nm9WSGFEdG9qakxVOGd0T3pSeExXbUFSYlU3KytR T1J2Z1lFT3l2K2U4NmZpOWlXUWx2R3NLOUZ4TWNpL3QrdXRLbHltRzRaRTJDYzUrcHYwQkRw LzFabWQ2M2k4bnl5aWtXL2c4RXVHQmlMeUE3OGwwRGN1dWNPdnRTQkhjKzB0ZHBaOS9Nb29O SS9wM2hNV3JCVXFQbm9kd1FpZFExY1N3K2haYVBBTVpsRThpcHduaGs2U1pFclJhLyswWlJB ZlBBdlBzeG8vaGJ2ZkZiSzB5RzlPcVIvNEZoVnBGK2hpaG4xc1NkSWRLTDExdDdsSDd4MnUw dWlTTFJuN0ZIOUt1UWhmbHJiZlVLZU5JQUZBVHpFWXlpUlpPTmg0L0RHMEh3M1BxVlRiUVhH NzcxcDd5RExQNG9FNURKbVhWWlQ2SnBPV2pQVVovbVVlVkxDU2l1SzlFWENBRkcwdUNqemVX Rk1uRXZQSVR5aVJtcDdnMit5NE5kTzRYZ2lScjA5a21uVGtUTFhUYWg5V2VGNVA3RDRIWFpz bVBpQjBTOWUrb3l3bUYzRGhuV0hiZ1BDSzlnKzhjWWpIemlGNkhzSjRsc1U9CkFBQUFIUT09 CmVGZDhieHNpaCtxbjFRRkNibmZXdDEyZmZZVlQ1ZE9IOGF0TDdDRC93VzRKcU13THVPM3NN bzR0Nk1QMGpFMlJ5R21xbDRhYm5kZXhqSEJvYzZGQUVKUk1kZTlZdkt4V0dwTlRuNkVtSlEz aTBNdzA2Mk8yYmljSFhHdmNEdzB6WklmVis1WWZmSjBqVXcySzhUWUs5RFdFdWJ2UmtKenQy d3B3Q0pBUHczR3U5cGxXODZ2SVNUUkVpcFNwYkFZbXVzL3JUNmdsVjNPMHNzVlFSeUxaWmRP OUtQaVM4RGo2cTVYVHErZ0VrWmt4V3pvL2dVQktlV29iYlZXUHRsdTdNTVExeVlrSS9NZDFx ZE9QdUdxckxTYWV6LzEyNVBXT3ZZMlBPWmVhL2tsNjZiRWNIakRFRFdFMFNmbHU= --------------080709000201090006090900 Content-Type: text/plain; name="sign_test.b" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="sign_test.b" implement Sign; include "sys.m"; sys: Sys; sprint: import sys; include "draw.m"; include "keyring.m"; keyring: Keyring; DigestState, PK: import keyring; Sign: module { init: fn(nil: ref Draw->Context, args: list of string); }; Metafilesizemax: con 8*1024; hash := "sha1"; # usage: sign_test [hashname] < secretkey init(nil: ref Draw->Context, argv: list of string) { sys = load Sys Sys->PATH; keyring = load Keyring Keyring->PATH; if(len argv > 1) hash = hd tl argv; (skd, err) := readstdin(Metafilesizemax); if(err != nil) { } else { sk := keyring->strtosk(string skd); if(sk == nil) { warn("malformed secret key"); } else { bytes := array of byte "some data"; dstate := keyring->sha1(bytes, len bytes, nil, nil); if(dstate == nil) { warn("failed to make digest"); } else { exp := 1258801674; # long time in the future cert := keyring->sign(sk, exp, dstate, hash); if(cert == nil) warn("did not make certificate"); else sys->print("%s", keyring->certtostr(cert)); } } } } readstdin(maxsize: int): (array of byte, string) { n := sys->readn(sys->fildes(0), d := array[maxsize] of byte, len d); if(n < 0) return (nil, sprint("read stdin %r")); if(n == len d) return (nil, sprint("file stdin too large")); return (d[:n], nil); } warn(s: string) { sys->fprint(sys->fildes(2), "%s\n", s); } --------------080709000201090006090900--