Skip to content
/ ffiasm Public

This package is a script that generates a Finite field Library in Intel64 and ARM Assembly

License

Notifications You must be signed in to change notification settings

iden3/ffiasm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b9dce0a · Sep 7, 2024

History

94 Commits
Nov 20, 2020
Jun 14, 2022
Jul 17, 2024
Jun 5, 2023
Jun 2, 2022
Mar 26, 2020
Nov 4, 2020
Sep 7, 2024
Sep 7, 2024
Mar 26, 2020
May 18, 2023
May 18, 2023
Jun 14, 2022

Repository files navigation

Important note

This is a new implementation of ffiasm. If you need access to the original (and now obsoleted) implemenation at https://github.com/iden3/ffiasm-old .

ffiasm

This package is a script that generates a Finite field Library in Intel64 / ARM64 Assembly

Usage

install g++ nasm ang gmp library if you don't have it.

npm install -g ffiasm
mkdir myProject
cd myProject
buildzqfield -q 21888242871839275222246405745257275088548364400416034343698204186575808495617 -n Fr

You now will have two files fr.cpp, fr.hpp and fr.asm

ls

If you are in linux:

nasm -felf64 fr.asm

If you are in a mac:

nasm -fmacho64 --prefix _ fr.asm

Create a file named main.cpp to use the library

#include <stdio.h>
#include <stdlib.h>
#include "fr.hpp"

int main() {
    Fr_init();

    FrElement a;
    a.type = Fr_SHORT;
    a.shortVal = 2;

    FrElement b;
    b.type = Fr_SHORT;
    b.shortVal = 6;

    FrElement c;

    Fr_mul(&c, &a, &b);

    char *c1 = Fr_element2str(&c);
    printf("Result: %s\n", c1);
    free(c1);
}

Compile it

g++ main.cpp fr.o fr.cpp -o example -lgmp

Run it

./example

Benchmark

npm run benchmark

License

ffiasm is part of the iden3 project copyright 2020 0KIMS association and published with LGPL-3 license. Please check the COPYING file for more details.

About

This package is a script that generates a Finite field Library in Intel64 and ARM Assembly

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published