klave 0.5.0

A Rust SDK for the Klave platform.
Documentation
package klave:sdk;

interface sdk {
    // for now no types : keep same interface as pure host-provided native calls

    // should only be called by register-routes
    add-user-query: func(query-name: string);
    add-user-transaction: func(transaction-name: string);

    // normal sdk calls accessible to the user

    // Notifications
    notify: func(msg: string);
    notify-error: func(msg: string);
    on-success-notify: func(msg: string);

    // Context
    query-context: func(param: string) -> result<string, string>;

    // Ledger
    read-ledger: func(table: string, key: list<u8>) -> result<list<u8>, string>;
    list-keys-from-ledger: func(table: string) -> result<string, string>;
    key-exists-in-ledger: func(table: string, key: list<u8>) -> result<bool, string>;
    write-ledger: func(table: string, key: list<u8>, value: list<u8>) -> result<_, string>;
    remove-from-ledger: func(table: string, key: list<u8>) -> result<_, string>;

    // LLM - Inference
    load-lightgbm-model: func(name: string, model: string) -> result<_, string>;
    unload-lightgbm-model: func(name: string) -> result<_, string>;
    infer-from-lightgbm-model: func(name: string, data: list<f64>, nb-outputs: s32) -> result<list<f64>, string>;

    //Subtle Crypto
    key-exists: func(key-name: string) -> result<bool, string>;
    generate-key: func(key-name: string, algorithm: s32, algo-metadata: string, extractable: s32, usages: list<u8>) -> result<string, string>;
    import-key: func(key-name: string, key-format: s32, key-data: list<u8>, algorithm: s32, algo-metadata: string, extractable: s32, usages: list<u8>) -> result<string, string>;
    export-key: func(key-name: string, key-format: s32) -> result<list<u8>, string>;
    get-public-key: func(key-name: string) -> result<list<u8>, string>;
    get-public-key-as-cryptokey: func(key-name: string) -> result<string, string>;
    derive-key: func(base-key-name: string, derivation-algorithm: s32, derivation-metadata: string, derived-key-algorithm: s32, derived-key-metadata: string, extractable: s32, usages: list<u8>) -> result<string, string>;
    derive-bits: func(base-key-name: string, derivation-algorithm: s32, derivation-metadata: string, length: s32) -> result<list<u8>, string>;
    encrypt: func(key-name: string, encrypt-algo-id: s32, encrypt-metadata: string, plain-txt: list<u8>) -> result<list<u8>, string>;
    decrypt: func(key-name: string, decrypt-algo-id: s32, decrypt-metadata: string, cipher-txt: list<u8>) -> result<list<u8>, string>;
    sign: func(key-name: string, sign-algo-id: s32, sign-metadata: string, txt: list<u8>) -> result<list<u8>, string>;
    verify: func(key-name: string, sign-algo-id: s32, sign-metadata: string, txt: list<u8>, signature: list<u8>) -> result<bool, string>;
    digest: func(algo-id: s32, hash-metadata: string, txt: list<u8>) -> result<list<u8>, string>;
    unwrap-key: func(decrypt-key-name: string, decrypt-algo-id: s32, decrypt-metadata: string, key-name-to-import: string, key-format: s32, wrapped-key-data: list<u8>, algorithm: s32, algo-metadata: string, extractable: s32, usages: list<u8>) -> result<string, string>;
    wrap-key: func(key-name-to-export: string, key-format: s32, encrypt-key-name: string, encrypt-algo-id: s32, encrypt-metadata: string) -> result<list<u8>, string>;

    //CryptoKey Management
    save-key: func(key-name: string) -> result<_, string>;
    persist-key: func(key-persist-params: string) -> result<_, string>;
    load-key: func(key-name: string) -> result<string, string>;
    delete-key: func(key-name: string) -> result<_, string>;

    //Simple Crypto
    generate-simple-encryption-key: func(key-name: string) -> result<_, string>;
    generate-simple-signing-key: func(key-name: string) -> result<_, string>;
    simple-encrypt: func(key-name: string, plain-txt: list<u8>) -> result<list<u8>, string>;
    simple-decrypt: func(key-name: string, cipher-txt: list<u8>) -> result<list<u8>, string>;
    simple-sign: func(key-name: string, txt: list<u8>) -> result<list<u8>, string>;
    simple-verify: func(key-name: string, txt: list<u8>, signature: list<u8>) -> result<bool, string>;
    simple-digest: func(txt: list<u8>) -> result<list<u8>, string>;

    //Random
    get-random-bytes: func(len: s32) -> result<list<u8>, string>;

    //HTTP
    https-query: func(request: string) -> result<string, string>;

    //Attestation
    get-quote: func(challenge: list<u8>) -> result<list<u8>, string>;
    verify-quote: func(current-time: s64, quote-binary: list<u8>) -> result<string, string>;
    parse-quote: func(quote: list<u8>)-> result<string, string>;

    //PostGreSql
    connection-open: func(uri: string) -> result<string, string>;
    sql-query: func(connection: string, query: string) -> result<string, string>;
    sql-exec: func(connection: string, command: string) -> result<string, string>;

    //Subscription
    start-recording: func();
    stop-recording: func();

    //Transaction
    cancel-transaction: func();
}