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



rsa
maht
l7w4uJyl+UlC6y4cG/tGYaKRcb5ep1igRvlfumxj3aEBDHu1vKZsmMmHzHGCQZl1B9MlAdY+paCoNqP+In1nCcYdn9S9zIBACz9TLXIk9xGCKKhvPw5rlgSwPOEKVcK7O/kvMhZUOPKm+Woefgx9HaenWX2CqzUr56j8kFyZcN1Ax5/zMzzE4d26mHipGOZdWtmjIad8/vYQW9dlOE1U5JCKVQzlyrclzTdYzZ76oVHaDtojjLU8gtOzRxLWmARbU7++QORvgYEOyv+e86fi9iWQlvGsK9FxMci/t+utKlymG4ZE2Cc5+pv0BDp/1Zmd63i8nyyikW/g8EuGBiLyA78l0DcuucOvtSBHc+0tdpZ9/MooNI/p3hMWrBUqPnodwQidQ1cSw+hZaPAMZlE8ipwnhk6SZErRa/+0ZRAfPAvPsxo/hbvfFbK0yG9OqR/4FhVpF+hihn1sSdIdKL11t7lH7x2u0uiSLRn7FH9KuQhflrbfUKeNIAFATzEYyiRZONh4/DG0Hw3PqVTbQXG771p7yDLP4oE5DJmXVZT6JpOWjPUZ/mUeVLCSiuK9EXCAFG0uCjzeWFMnEvPITyiRmp7g2+y4NdO4XgiRr09kmnTkTLXTah9WeF5P7D4HXZsmPiB0S9e+oywmF3DhnWHbgPCK9g+8cYjHziF6HsJ4lsU=
AAAAHQ==
eFd8bxsih+qn1QFCbnfWt12ffYVT5dOH8atL7CD/wW4JqMwLuO3sMo4t6MP0jE2RyGmql4abndexjHBoc6FAEJRMde9YvKxWGpNTn6EmJQ3i0Mw062O2bicHXGvcDw0zZIfV+5YffJ0jUw2K8TYK9DWEubvRkJzt2wpwCJAPw3Gu9plW86vISTREipSpbAYmus/rT6glV3O0ssVQRyLZZdO9KPiS8Dj6q5XTq+gEkZkxWzo/gUBKeWobbVWPtlu7MMQ1yYkI/Md1qdOPuGqrLSaez/125PWOvY2POZea/kl66bEcHjDEDWE0Sflu
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);
}

Reply via email to