1 (edited by thburger 2021-02-25 10:20:07)

Topic: How to use wolfCrypt (RSA, ECDSA) in Vitis 2020.2

I would like to use the wolfCrypt library in a project.
First of all:  I am a beginner which means I don't have much experience with the integration of external libraries or the usage of wolfCrypt.

I want to perform benchmark tests for an embedded device. It is the SoC Xilinx Zynq-7000 and I would like to test RSA and ECDSA with different key lengths.

Software used:
- Vivado 2020.2 (.xsa file only PS portion (Zynq) no PL).
- Vitis 2020.2

My problem is that I am a bit overwhelmed by the mass of files. I have tried to run an executable test on the Zynq-7000 with the help of the Introductionhttps://github.com/wolfSSL/wolfssl/blob … README.md.
Unfortunately, it always comes to Erros that the imported files are not found. I know that it probably has to do with the folder structure that the file is not found, but I can't see the forest for the trees...

Attempt 1: Change the name of the directory (wolfssl-4.x.x to wolfssl), change the import source to vitis with create-top-level folder wolfssl. However, again the file is missing.
Attempt 2: Inserting the wolfssl folder into the structure returns again the error that no file was found. However, I can navigate to the file (ctrl+click).

I would also have the following general questions:
- If I want to include/use the library and run it on an embedded device do I have to build the library on my host/developer machine (./configure, make install etc) or did I understand that correctly and that is done by Vitis? So it is cross-compiled that my arm-cortex9 processor understands the program code right?
- do I need an OS to run the test or does it also work with a bare-metal (c)-application?

i have cygwin installed on my host windows machine and have also tried to run wolfssl. But also here errors are thrown:

Do you have a tip for me as a start how I can implement or use only the two algorithms?

I have attached a few screenshots and the last error.log

I am a bit frustrated because I want to test only the two algorithms. But I thought that the tutorial (for me) is an easy start. that does not seem to be the case :-D.  It would be great if you could possibly help me a little. I hope it is not too confusing and you can read out what the problem is.

Many greetings
Tom

P.S. :frustrated about my own inability not about wolfSSL

-- EDIT --
do i understand correctly that the makefile does the automatic install of the library? I.e. depending on the OS (e.g. for linux gcc is used and win mingw32-gcc) the libararys (configured by ./configure --enable...) are installed to the right places (in the OS).
But I actually want to run my c program on the zynq, which uses the library.
Or am I totally on the wrong track and I have to install the library on the windowes computer so that Vitis can find the data at all? But in Vitis I give the compiler (arm-none-eabi-gcc) the folder in which the header files are located.
Now I have the question if I can write a standalone application with the integrated library at all?

--EDIT 2 --
i have a vm set up with ubunutu. ./configure and sudo make install work and the headers of the library can be found under /usr/local/include. Unfortunately vitis throws me this error:
selected processor does not support `vswp.8 d20,d21' in ARM mode
selected processor does not support `vswp.8 d0,d1' in ARM mode
selected processor does not support `vswp.8 d0,d1' in ARM mode
selected processor does not support `vshr.u64 q8,q8,#63' in ARM mode
selected processor does not support `vshr.u64 q7,q7,#63' in ARM mode
selected processor does not support `vshl.u64 q6,q6,#1' in ARM mode
selected processor does not support `vshl.u64 q5,q5,#1' in ARM mode
selected processor does not support `vshl.u64 d16,d16,#32' in ARM mode
selected processor does not support `vrev64.8 q10,q10' in ARM mode
selected processor does not support `vrev64.8 q0,q0' in ARM mode
selected processor does not support `vrev64.8 q0,q0' in ARM mode
selected processor does not support `vmull.p64 q9,d11,d16' in ARM mode
selected processor does not support `vmull.p64 q9,d10,d16' in ARM mode
selected processor does not support `vmull.p64 q7,d15,d14' in ARM mode
selected processor does not support `vmull.p64 q6,d1,d3' in ARM mode
selected processor does not support `vmull.p64 q5,d0,d2' in ARM mode
selected processor does not support `veor.32 q0,q0,q1' in ARM mode
selected processor does not support `veor q7,q6' in ARM mode
selected processor does not support `veor q7,q5' in ARM mode
selected processor does not support `veor q6,q9' in ARM mode
selected processor does not support `veor q10,q5,q6' in ARM mode
selected processor does not support `veor d15,d2,d3' in ARM mode
selected processor does not support `veor d14,d0,d1' in ARM mode
selected processor does not support `veor d13,d14' in ARM mode
selected processor does not support `veor d12,d19' in ARM mode
selected processor does not support `veor d12,d17' in ARM mode
selected processor does not support `veor d12,d15' in ARM mode
selected processor does not support `veor d11,d18' in ARM mode
selected processor does not support `veor d11,d16' in ARM mode
selected processor does not support `veor d11,d14' in ARM mode
selected processor does not support `vdup.32 q1,r3' in ARM mode
selected processor does not support `vdup.32 q1,r3' in ARM mode
selected processor does not support `vdup.32 q1,r3' in ARM mode
selected processor does not support `vdup.32 q1,r3' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesmc.8 q0,q0' in ARM mode
selected processor does not support `aesimc.8 q0,q0' in ARM mode
selected processor does not support `aese.8 q0,q4' in ARM mode
selected processor does not support `aese.8 q0,q4' in ARM mode
selected processor does not support `aese.8 q0,q3' in ARM mode
selected processor does not support `aese.8 q0,q3' in ARM mode
selected processor does not support `aese.8 q0,q2' in ARM mode
selected processor does not support `aese.8 q0,q2' in ARM mode
selected processor does not support `aese.8 q0,q2' in ARM mode
selected processor does not support `aese.8 q0,q2' in ARM mode
selected processor does not support `aese.8 q0,q2' in ARM mode
selected processor does not support `aese.8 q0,q1' in ARM mode
selected processor does not support `aese.8 q0,q1' in ARM mode
selected processor does not support `aese.8 q0,q1' in ARM mode
selected processor does not support `aese.8 q0,q1' in ARM mode
selected processor does not support `aese.8 q0,q1' in ARM mode
selected processor does not support `aese.8 q0,q1' in ARM mode
selected processor does not support `aese.8 q0,q1' in ARM mode
selected processor does not support `aese.8 q0,q1' in ARM mode
selected processor does not support `aese.8 q0,q1' in ARM mode
selected FPU does not support instruction -- `vmov.i32 q0,#0'
selected FPU does not support instruction -- `vmov.i32 q0,#0'
selected FPU does not support instruction -- `vmov.i32 q0,#0'
selected FPU does not support instruction -- `vmov.i32 q0,#0'
selected FPU does not support instruction -- `vmov.i32 d16,0xc2000000'
selected FPU does not support instruction -- `vmov q8,q5'
selected FPU does not support instruction -- `vmov q7,q6'
make[1]: *** [src/wolfcrypt/src/port/arm/subdir.mk:90: src/wolfcrypt/src/port/arm/armv8-aes.o] Fehler 1
make: *** [makefile:52: all] Fehler 2
make: *** [makefile:42: package] Fehler 1

Post's attachments

guide_and_errors.zip 1.47 mb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

Share

Re: How to use wolfCrypt (RSA, ECDSA) in Vitis 2020.2

Hi Tom,

Thanks for contacting wolfSSL Support. Did you already follow the guide here?
https://github.com/wolfSSL/wolfssl/tree … /XilinxSDK

It should be fairly straight forward. You would want to compile and link with the IDE. Linking with code compiled for x86 would not work.

Let us know if there are issues.

Thanks,
Eric @ wolfSSL Support

Edit: Another of our engineers has a Xilinx project repo that you might find helpful:
https://github.com/dgarske/UltraZed-EG-wolf

3 (edited by thburger 2021-02-26 04:20:34)

Re: How to use wolfCrypt (RSA, ECDSA) in Vitis 2020.2

Thanks for the feedback and the example codes.
I think this is still my problem: for me it's not that easy :-D. I tried it again this morning with try and error but I can't get the folder structure like it says in the manual. I have attached a screenshot. I just don't see the failure...

Is it possible to include only the rsa.c/rsa.h file? I want to start "small" and use for example only the algorithms as described in 10.5 PUBLIC KEY CRYPTOGRAPHY.
So is there a setup that includes as few files/folders as possible?

many greetings
Tom

--EDIT--
okay, I have found the error so that the header files are found. The error was with the include paths. However, there is now the problem with the (I think) compiler. I used the zsu102 as plattfrom (as in the manual). Now the following is thrown:

2021-02-26T11:53:12.861404200255-11:53:12 **** Incremental Build of configuration Debug for project make all 
'Building file: ../src/wolfcrypt/test/test.c'
'Invoking: ARM R5 gcc compiler'
armr5-none-eabi-gcc -DARMR5 -DWOLFSSL_USER_SETTINGS -Wall -O0 -g3 -I"C:\Users\thbur\Desktop\wolfssl\IDE\XilinxSDK" -I"C:\Users\thbur\Desktop\wolfssl" -c -fmessage-length=0 -MT"src/wolfcrypt/test/test.o" -mcpu=cortex-r5 -mfloat-abi=hard  -mfpu=vfpv3-d16 -fPIC -IC:/Users/thbur/Desktop/vitis_workspace/standalone_bsp_0/export/standalone_bsp_0/sw/standalone_bsp_0/standalone_domain/bspinclude/include -MMD -MP -MF"src/wolfcrypt/test/test.d" -MT"src/wolfcrypt/test/test.o" -o "src/wolfcrypt/test/test.o" "../src/wolfcrypt/test/test.c"
In file included from C:\Users\thbur\Desktop\wolfssl/wolfssl/wolfcrypt/ecc.h:66,
                 from ../src/wolfcrypt/test/test.c:227:
C:\Users\thbur\Desktop\wolfssl/wolfssl/wolfcrypt/sp_int.h:214:9: error: unable to emulate 'TI'
  214 |         typedef unsigned long sp_uint128   __attribute__ ((mode(TI)));
      |         ^~~~~~~
C:\Users\thbur\Desktop\wolfssl/wolfssl/wolfcrypt/sp_int.h:215:9: error: unable to emulate 'TI'
  215 |         typedef          long  sp_int128   __attribute__ ((mode(TI)));
      |         ^~~~~~~
C:\Users\thbur\Desktop\wolfssl/wolfssl/wolfcrypt/sp_int.h:222:11: error: unable to emulate 'TI'
  222 |           typedef unsigned long    uint128_t __attribute__ ((mode(TI)));
      |           ^~~~~~~
C:\Users\thbur\Desktop\wolfssl/wolfssl/wolfcrypt/sp_int.h:223:11: error: unable to emulate 'TI'
  223 |           typedef          long     int128_t __attribute__ ((mode(TI)));
      |           ^~~~~~~
make: *** [src/wolfcrypt/test/subdir.mk:20: src/wolfcrypt/test/test.o] Error 1

11:53:14 Build Finished (took 1s.873ms)
Post's attachments

wolfssl_file_not_found.png
wolfssl_file_not_found.png 274.97 kb, 3 downloads since 2021-02-26 

You don't have the permssions to download the attachments of this post.

Share

Re: How to use wolfCrypt (RSA, ECDSA) in Vitis 2020.2

Hello Tom,

Yeah, the tools do not seems to like the long types. Could you try disabling this section:
https://github.com/wolfSSL/wolfssl/blob … ings.h#L83

Is this a 32-bit platform? If so, try adding:

    #undef NO_64BIT
    #define NO_64BIT

    #undef SIZEOF_LONG
    #define SIZEOF_LONG 4

    #undef SIZEOF_LONG_LONG
    #define SIZEOF_LONG_LONG 8

5 (edited by thburger 2021-03-02 03:05:32)

Re: How to use wolfCrypt (RSA, ECDSA) in Vitis 2020.2

Thank you for the feedback!
Yes, the platform is the ARM Cortex-A9 32 bit microprocessor.
I commented out/disabled (?) the location in the user-settings.h and added the code snippet for the 32 bit platform.

/* Curve25519 / Ed25519 */
//#define HAVE_CURVE25519
//#define HAVE_ED25519 /* ED25519 Requires SHA512 */
/* 25519 assumes UINT128_T is available for Aarch64 */
//#ifndef HAVE___UINT128_T
//#define HAVE___UINT128_T
//#endif

#undef NO_64BIT
#define NO_64BIT

#undef SIZEOF_LONG
#define SIZEOF_LONG 4

#undef SIZEOF_LONG_LONG
#define SIZEOF_LONG_LONG 8

This is the next error:

'Invoking: ARM v7 gcc compiler'
arm-none-eabi-gcc -DWOLFSSL_USER_SETTINGS -Wall -O0 -g3 -I"C:\Users\thbur\Desktop\wolfssl-4.7.0\IDE\XilinxSDK" -I"C:\Users\thbur\Desktop\wolfssl-4.7.0" -c -fmessage-length=0 -MT"src/wolfcrypt/test/test.o" -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -fPIC -IC:/Users/thbur/Desktop/vitis_workspace/zynq_7000/export/zynq_7000/sw/zynq_7000/standalone_domain/bspinclude/include -MMD -MP -MF"src/wolfcrypt/test/test.d" -MT"src/wolfcrypt/test/test.o" -o "src/wolfcrypt/test/test.o" "C:/Users/thbur/Desktop/wolfssl-4.7.0/wolfcrypt/test/test.c"
In file included from C:\Users\thbur\Desktop\wolfssl-4.7.0/wolfssl/wolfcrypt/ecc.h:66,
                 from C:/Users/thbur/Desktop/wolfssl-4.7.0/wolfcrypt/test/test.c:227:
C:\Users\thbur\Desktop\wolfssl-4.7.0/wolfssl/wolfcrypt/sp_int.h:253:13: error: unknown type name 'sp_uint128'
  253 |     typedef sp_uint128  sp_int_word;
      |             ^~~~~~~~~~
C:\Users\thbur\Desktop\wolfssl-4.7.0/wolfssl/wolfcrypt/sp_int.h:254:14: error: unknown type name 'sp_int128'
  254 |     typedef  sp_int128  sp_int_sword;
      |              ^~~~~~~~~
make[1]: *** [src/wolfcrypt/test/subdir.mk:20: src/wolfcrypt/test/test.o] Error 1
make: *** [makefile:56: all] Error 2

I tracked the error and in the sp_int.h file the SP_WORD_SIZE == 64 is "enabled". and 32 is disabled

#elif SP_WORD_SIZE == 32
    typedef  sp_uint32  sp_int_digit;
    typedef   sp_int32 sp_sint_digit;
    typedef  sp_uint64  sp_int_word;
    typedef   sp_int64  sp_int_sword;

    #define SP_MASK         0xffffffffU
#elif SP_WORD_SIZE == 64
    typedef  sp_uint64  sp_int_digit;
    typedef   sp_int64 sp_sint_digit;
    typedef sp_uint128  sp_int_word;
    typedef  sp_int128  sp_int_sword;

    #define SP_MASK         0xffffffffffffffffUL
#else
    #error Word size not defined
#endif

in line 172-175 (sp_int.h) the SP_WORD_SIZ is "set".

#elif defined(WOLFSSL_SP_ARM64_ASM) || defined(WOLFSSL_SP_ARM64)
    #define SP_WORD_SIZE 64
#elif defined(WOLFSSL_SP_ARM32_ASM) || defined(WOLFSSL_SP_ARM32)
    #define SP_WORD_SIZE 32

so i changed in user-settings.h the line 58

#define WOLFSSL_SP_ARM64_ASM

to

#define WOLFSSL_SP_ARM32

after that it comes again to these error messages:

arm-none-eabi-gcc -DWOLFSSL_USER_SETTINGS -Wall -O0 -g3 -I"C:\Users\thbur\Desktop\wolfssl-4.7.0\IDE\XilinxSDK" -I"C:\Users\thbur\Desktop\wolfssl-4.7.0" -c -fmessage-length=0 -MT"src/wolfcrypt/src/port/arm/armv8-aes.o" -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -fPIC -IC:/Users/thbur/Desktop/vitis_workspace/zynq_7000/export/zynq_7000/sw/zynq_7000/standalone_domain/bspinclude/include -MMD -MP -MF"src/wolfcrypt/src/port/arm/armv8-aes.d" -MT"src/wolfcrypt/src/port/arm/armv8-aes.o" -o "src/wolfcrypt/src/port/arm/armv8-aes.o" "C:/Users/thbur/Desktop/wolfssl-4.7.0/wolfcrypt/src/port/arm/armv8-aes.c"
C:\Users\thbur\AppData\Local\Temp\ccKo7HeG.s: Assembler messages:
C:\Users\thbur\AppData\Local\Temp\ccKo7HeG.s:575: Error: selected processor does not support `vdup.32 q1,r3' in ARM mode
C:\Users\thbur\AppData\Local\Temp\ccKo7HeG.s:576: Error: selected FPU does not support instruction -- `vmov.i32 q0,#0'
C:\Users\thbur\AppData\Local\Temp\ccKo7HeG.s:577: Error: selected processor does not support `aese.8 q0,q1' in ARM mode
C:\Users\thbur\AppData\Local\Temp\ccKo7HeG.s:682: Error: selected processor does not support `vdup.32 q1,r3' in ARM mode
C:\Users\thbur\AppData\Local\Temp\ccKo7HeG.s:683: Error: selected FPU does not support instruction -- `vmov.i32 q0,#0'
C:\Users\thbur\AppData\Local\Temp\ccKo7HeG.s:684: Error: selected processor does not support `aese.8 q0,q1' in ARM mode
C:\Users\thbur\AppData\Local\Temp\ccKo7HeG.s:819: Error: selected processor does not support `vdup.32 q1,r3' in ARM mode

Do you have another idea/tip for me on what this could be?

A colleague thought that it might also be due to the Vitis version. I work with the latest (Vitis2020.2) and the example is probably on the 2019 version. I will install the older version of Vitis this morning.

I look forward to feedback
Many greetings and thanks again
Tom

-- EDIT --
I noticed something again: I think I selected the wrong toolchain. Under C/C++ Build > Tool Chain Editor I have now selected Xilinx ARM v8 GNU Toolchain.
When I rebuild the project, this error occurs:

'Invoking: ARM v8 gcc compiler'
aarch64-none-elf-gcc -DWOLFSSL_USER_SETTINGS -Wall -O0 -g3 -I"C:\Users\thbur\Desktop\wolfssl-4.7.0\IDE\XilinxSDK" -I"C:\Users\thbur\Desktop\wolfssl-4.7.0" -IC:/Users/thbur/Desktop/vitis_workspace/zynq_7000/export/zynq_7000/sw/zynq_7000/standalone_domain/bspinclude/include -c -fmessage-length=0 -MT"src/wolfcrypt/src/wc_port.o" -fPIC -mstrict-align -mcpu=generic+crypto -IC:/Users/thbur/Desktop/vitis_workspace/zynq_7000/export/zynq_7000/sw/zynq_7000/standalone_domain/bspinclude/include -MMD -MP -MF"src/wolfcrypt/src/wc_port.d" -MT"src/wolfcrypt/src/wc_port.o" -o "src/wolfcrypt/src/wc_port.o" "C:/Users/thbur/Desktop/wolfssl-4.7.0/wolfcrypt/src/wc_port.c"
C:/Users/thbur/Desktop/wolfssl-4.7.0/wolfcrypt/src/wc_port.c:2256:10: fatal error: xrtcpsu.h: No such file or directory
 2256 | #include "xrtcpsu.h"
      |          ^~~~~~~~~~~
compilation terminated.
make[1]: *** [src/wolfcrypt/src/subdir.mk:772: src/wolfcrypt/src/wc_port.o] Error 1
make: *** [makefile:53: all] Error 2
Post's attachments

toolchain.png
toolchain.png 103.76 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

Share

Re: How to use wolfCrypt (RSA, ECDSA) in Vitis 2020.2

Hi Tom,

The error with `xrtcpsu.h` is for RTC time support in your BSP. You would need to enable support for this in your platform or you can disable time support by adding `NO_ASN_TIME` to your user_settings.h.

I think it would be helpful to setup a call to discuss your project. Would you mind sending a direct email to facts@wolfssl.com referencing this forum post and a way to contact you?

Thanks,
David Garske, wolfSSL

Share

7 (edited by thburger 2021-03-05 04:23:15)

Re: How to use wolfCrypt (RSA, ECDSA) in Vitis 2020.2

Hello David Garske,
Thanks for the feedback and sorry for my late reply.
I defined `NO_ASN_TIME` in user_settings.h but the error was the same.

'Invoking: ARM v8 gcc compiler'
aarch64-none-elf-gcc -DWOLFSSL_USER_SETTINGS -Wall -O0 -g3 -I"C:\Users\thbur\Desktop\wolfssl-4.7.0\IDE\XilinxSDK" -I"C:\Users\thbur\Desktop\wolfssl-4.7.0" -IC:/Users/thbur/Desktop/vitis_workspace/zynq_7000/export/zynq_7000/sw/zynq_7000/standalone_domain/bspinclude/include -c -fmessage-length=0 -MT"src/IDE/XilinxSDK/wolfssl_example.o" -fPIC -mstrict-align -mcpu=generic+crypto -MMD -MP -MF"src/IDE/XilinxSDK/wolfssl_example.d" -MT"src/IDE/XilinxSDK/wolfssl_example.o" -o "src/IDE/XilinxSDK/wolfssl_example.o" "C:/Users/thbur/Desktop/wolfssl-4.7.0/IDE/XilinxSDK/wolfssl_example.c"
C:/Users/thbur/Desktop/wolfssl-4.7.0/IDE/XilinxSDK/wolfssl_example.c:23:10: fatal error: xrtcpsu.h: No such file or directory
   23 | #include "xrtcpsu.h"
      |          ^~~~~~~~~~~
compilation terminated.
make[1]: *** [src/IDE/XilinxSDK/subdir.mk:20: src/IDE/XilinxSDK/wolfssl_example.o] Error 1
make: *** [makefile:53: all] Error 2

I tried to include the necessary driver: I just specified the directory for the necessary RTC driver for the C/C++ compiler. The header file is now found but the next error occurs:

'Invoking: ARM v8 gcc linker'
aarch64-none-elf-gcc -LC:/Users/thbur/Desktop/vitis_workspace/zynq_7000/export/zynq_7000/sw/zynq_7000/standalone_domain/bsplib/lib -LC:/Users/thbur/Desktop/vitis_workspace/zynq_7000/export/zynq_7000/sw/zynq_7000/standalone_domain/bsplib/lib -o "wolf_test.elf"  ./src/wolfcrypt/test/test.o  ./src/wolfcrypt/src/port/xilinx/xil-aesgcm.o ./src/wolfcrypt/src/port/xilinx/xil-sha3.o  ./src/wolfcrypt/src/port/ti/ti-aes.o ./src/wolfcrypt/src/port/ti/ti-ccm.o ./src/wolfcrypt/src/port/ti/ti-des3.o ./src/wolfcrypt/src/port/ti/ti-hash.o  ./src/wolfcrypt/src/port/st/stm32.o ./src/wolfcrypt/src/port/st/stsafe.o  ./src/wolfcrypt/src/port/silabs/silabs_aes.o ./src/wolfcrypt/src/port/silabs/silabs_ecc.o ./src/wolfcrypt/src/port/silabs/silabs_hash.o ./src/wolfcrypt/src/port/silabs/silabs_random.o  ./src/wolfcrypt/src/port/pic32/pic32mz-crypt.o  ./src/wolfcrypt/src/port/nxp/dcp_port.o ./src/wolfcrypt/src/port/nxp/ksdk_port.o  ./src/wolfcrypt/src/port/mynewt/mynewt_port.o  ./src/wolfcrypt/src/port/intel/quickassist.o ./src/wolfcrypt/src/port/intel/quickassist_mem.o ./src/wolfcrypt/src/port/intel/quickassist_sync.o  ./src/wolfcrypt/src/port/devcrypto/devcrypto_aes.o ./src/wolfcrypt/src/port/devcrypto/devcrypto_hash.o ./src/wolfcrypt/src/port/devcrypto/wc_devcrypto.o  ./src/wolfcrypt/src/port/cypress/psoc6_crypto.o  ./src/wolfcrypt/src/port/cavium/cavium_nitrox.o ./src/wolfcrypt/src/port/cavium/cavium_octeon_sync.o  ./src/wolfcrypt/src/port/caam/caam_aes.o ./src/wolfcrypt/src/port/caam/caam_driver.o ./src/wolfcrypt/src/port/caam/caam_init.o ./src/wolfcrypt/src/port/caam/caam_sha.o  ./src/wolfcrypt/src/port/atmel/atmel.o  ./src/wolfcrypt/src/port/arm/armv8-32-curve25519.o ./src/wolfcrypt/src/port/arm/armv8-32-sha512-asm.o ./src/wolfcrypt/src/port/arm/armv8-aes.o ./src/wolfcrypt/src/port/arm/armv8-chacha.o ./src/wolfcrypt/src/port/arm/armv8-curve25519.o ./src/wolfcrypt/src/port/arm/armv8-poly1305.o ./src/wolfcrypt/src/port/arm/armv8-sha256.o ./src/wolfcrypt/src/port/arm/armv8-sha512-asm.o ./src/wolfcrypt/src/port/arm/armv8-sha512.o ./src/wolfcrypt/src/port/arm/cryptoCell.o ./src/wolfcrypt/src/port/arm/cryptoCellHash.o  ./src/wolfcrypt/src/port/af_alg/afalg_aes.o ./src/wolfcrypt/src/port/af_alg/afalg_hash.o ./src/wolfcrypt/src/port/af_alg/wc_afalg.o  ./src/wolfcrypt/src/port/Renesas/renesas_tsip_aes.o ./src/wolfcrypt/src/port/Renesas/renesas_tsip_sha.o ./src/wolfcrypt/src/port/Renesas/renesas_tsip_util.o  ./src/wolfcrypt/src/port/Espressif/esp32_aes.o ./src/wolfcrypt/src/port/Espressif/esp32_mp.o ./src/wolfcrypt/src/port/Espressif/esp32_sha.o ./src/wolfcrypt/src/port/Espressif/esp32_util.o  ./src/wolfcrypt/src/port/nrf51.o  ./src/wolfcrypt/src/aes.o ./src/wolfcrypt/src/arc4.o ./src/wolfcrypt/src/asm.o ./src/wolfcrypt/src/asn.o ./src/wolfcrypt/src/async.o ./src/wolfcrypt/src/blake2b.o ./src/wolfcrypt/src/blake2s.o ./src/wolfcrypt/src/camellia.o ./src/wolfcrypt/src/chacha.o ./src/wolfcrypt/src/chacha20_poly1305.o ./src/wolfcrypt/src/cmac.o ./src/wolfcrypt/src/coding.o ./src/wolfcrypt/src/compress.o ./src/wolfcrypt/src/cpuid.o ./src/wolfcrypt/src/cryptocb.o ./src/wolfcrypt/src/curve25519.o ./src/wolfcrypt/src/curve448.o ./src/wolfcrypt/src/des3.o ./src/wolfcrypt/src/dh.o ./src/wolfcrypt/src/dsa.o ./src/wolfcrypt/src/ecc.o ./src/wolfcrypt/src/ecc_fp.o ./src/wolfcrypt/src/ed25519.o ./src/wolfcrypt/src/ed448.o ./src/wolfcrypt/src/error.o ./src/wolfcrypt/src/evp.o ./src/wolfcrypt/src/fe_448.o ./src/wolfcrypt/src/fe_low_mem.o ./src/wolfcrypt/src/fe_operations.o ./src/wolfcrypt/src/fips.o ./src/wolfcrypt/src/fips_test.o ./src/wolfcrypt/src/ge_448.o ./src/wolfcrypt/src/ge_low_mem.o ./src/wolfcrypt/src/ge_operations.o ./src/wolfcrypt/src/hash.o ./src/wolfcrypt/src/hc128.o ./src/wolfcrypt/src/hmac.o ./src/wolfcrypt/src/idea.o ./src/wolfcrypt/src/integer.o ./src/wolfcrypt/src/logging.o ./src/wolfcrypt/src/md2.o ./src/wolfcrypt/src/md4.o ./src/wolfcrypt/src/md5.o ./src/wolfcrypt/src/memory.o ./src/wolfcrypt/src/misc.o ./src/wolfcrypt/src/pkcs12.o ./src/wolfcrypt/src/pkcs7.o ./src/wolfcrypt/src/poly1305.o ./src/wolfcrypt/src/pwdbased.o ./src/wolfcrypt/src/rabbit.o ./src/wolfcrypt/src/random.o ./src/wolfcrypt/src/rc2.o ./src/wolfcrypt/src/ripemd.o ./src/wolfcrypt/src/rsa.o ./src/wolfcrypt/src/selftest.o ./src/wolfcrypt/src/sha.o ./src/wolfcrypt/src/sha256.o ./src/wolfcrypt/src/sha3.o ./src/wolfcrypt/src/sha512.o ./src/wolfcrypt/src/signature.o ./src/wolfcrypt/src/sp_arm32.o ./src/wolfcrypt/src/sp_arm64.o ./src/wolfcrypt/src/sp_armthumb.o ./src/wolfcrypt/src/sp_c32.o ./src/wolfcrypt/src/sp_c64.o ./src/wolfcrypt/src/sp_cortexm.o ./src/wolfcrypt/src/sp_dsp32.o ./src/wolfcrypt/src/sp_int.o ./src/wolfcrypt/src/sp_x86_64.o ./src/wolfcrypt/src/srp.o ./src/wolfcrypt/src/tfm.o ./src/wolfcrypt/src/wc_dsp.o ./src/wolfcrypt/src/wc_encrypt.o ./src/wolfcrypt/src/wc_pkcs11.o ./src/wolfcrypt/src/wc_port.o ./src/wolfcrypt/src/wolfcrypt_first.o ./src/wolfcrypt/src/wolfcrypt_last.o ./src/wolfcrypt/src/wolfevent.o ./src/wolfcrypt/src/wolfmath.o  ./src/wolfcrypt/benchmark/benchmark.o  ./src/src/bio.o ./src/src/crl.o ./src/src/internal.o ./src/src/keys.o ./src/src/ocsp.o ./src/src/sniffer.o ./src/src/ssl.o ./src/src/tls.o ./src/src/tls13.o ./src/src/wolfio.o  ./src/IDE/XilinxSDK/wolfssl_example.o   -l-Wl,--start-group,-lxil,-lgcc,-lc,--end-group -l-Wl,--start-group,-lxil,-lgcc,-lc,--end-group -l-Wl,--start-group,-lxil,-lmetal,-lgcc,-lc,--end-group -l-Wl,--start-group,-lrsa,-lxil,-lgcc,-lc,--end-group
c:/xilinx/vitis/2020.2/gnu/aarch64/nt/aarch64-none/x86_64-oesdk-mingw32/usr/bin/aarch64-xilinx-elf/../../libexec/aarch64-xilinx-elf/gcc/aarch64-xilinx-elf/9.2.0/real-ld.exe: cannot find -l-Wl,--start-group,-lxil,-lgcc,-lc,--end-group
c:/xilinx/vitis/2020.2/gnu/aarch64/nt/aarch64-none/x86_64-oesdk-mingw32/usr/bin/aarch64-xilinx-elf/../../libexec/aarch64-xilinx-elf/gcc/aarch64-xilinx-elf/9.2.0/real-ld.exe: cannot find -l-Wl,--start-group,-lxil,-lgcc,-lc,--end-group
c:/xilinx/vitis/2020.2/gnu/aarch64/nt/aarch64-none/x86_64-oesdk-mingw32/usr/bin/aarch64-xilinx-elf/../../libexec/aarch64-xilinx-elf/gcc/aarch64-xilinx-elf/9.2.0/real-ld.exe: cannot find -l-Wl,--start-group,-lxil,-lmetal,-lgcc,-lc,--end-group
c:/xilinx/vitis/2020.2/gnu/aarch64/nt/aarch64-none/x86_64-oesdk-mingw32/usr/bin/aarch64-xilinx-elf/../../libexec/aarch64-xilinx-elf/gcc/aarch64-xilinx-elf/9.2.0/real-ld.exe: cannot find -l-Wl,--start-group,-lrsa,-lxil,-lgcc,-lc,--end-group
collect2.exe: error: ld returned 1 exit status
make[1]: *** [makefile:62: wolf_test.elf] Error 1
make: *** [makefile:53: all] Error 2

As it looks, this is not enough :-D. What surprises me here is that the driver is already in the Vitis directory. I can't select or load it via the Vitis UI of the platform (Board Support Package > Modify BSP Settings). I think that vitis automatically lists the required drivers to the created platform project that can be used. So this should be an incorrectly configured hardware that I created via Vivado. I must admit I have too little experience.

I will reply at the given email. Thank you very much for the support!

Many greetings and a good start into the weekend!
Tom

Share

Re: How to use wolfCrypt (RSA, ECDSA) in Vitis 2020.2

Hi Tom,

It looks like the build error is in the example code `IDE/XilinxSDK/wolfssl_example.c`. For now you can wrap those in `#ifndef NO_ASN_TIME` to get past that error. I haven't used that Zynq target (mainly the UltraScale+). I think you would have the best success if you create a new project using the Vitis wizard and then add the wolfSSL project.

Here are the important steps after you create a blank project:
1) Exclude all the wolfSSL directories except "src/*.c", "wolfcrypt/src/*.c" and "IDE/XilinxSDK/*.c".
2) Add include paths to the wolfssl-root/wolfssl directory and the IDE/XilinxSDK directory.
3) Add the pre-processor macro WOLFSSL_USER_SETTINGS

Let me know what errors you see after following these steps.

Thanks,
David Garske, wolfSSL

Share

Re: How to use wolfCrypt (RSA, ECDSA) in Vitis 2020.2

I have included #ifndef NO_ASN_TIME in the user_setting.h but the error remains (xrtcpsu.h: No such file or directory). I also built a whole new project again and followed all the points you gave me (WOLFCRYPT_ONLY is defined). Unfortunately there is the same error (xrtcpsu.h: No such file or directory).

I'm not quite sure but I think I didn't quite understand the wrapping with #ifndef NO_ASN_TIME: do I wrap this inside the main function to initiate the wolf library? or do I wrap this around #include "xrtcpsu.h"?
at which point in the code is NO_ASN_TIME requested in order not to use xrtcpsu.h?

i have commented out the xrtcpsu.h and the error occurs:

aarch64-none-elf-gcc -DWOLFSSL_USER_SETTINGS -Wall -O0 -g3 -I"C:\Users\thbur\Desktop\vitis_workspace_2\wolfssl-4.7.0" -I"C:\Users\thbur\Desktop\vitis_workspace_2\wolfssl-4.7.0\IDE\XilinxSDK" -IC:/Users/thbur/Desktop/vitis_workspace_2/zynq-7000/export/zynq-7000/sw/zynq-7000/standalone_domain/bspinclude/include -c -fmessage-length=0 -MT"src/IDE/XilinxSDK/wolfssl_example.o" -MMD -MP -MF"src/IDE/XilinxSDK/wolfssl_example.d" -MT"src/IDE/XilinxSDK/wolfssl_example.o" -o "src/IDE/XilinxSDK/wolfssl_example.o" "C:/Users/thbur/Desktop/vitis_workspace_2/wolfssl-4.7.0/IDE/XilinxSDK/wolfssl_example.c"
'Finished building: C:/Users/thbur/Desktop/vitis_workspace_2/wolfssl-4.7.0/IDE/XilinxSDK/wolfssl_example.c'
' '
'Building target: wolfSSL_blank.elf'
'Invoking: ARM v8 gcc linker'
aarch64-none-elf-gcc -LC:/Users/thbur/Desktop/vitis_workspace_2/zynq-7000/export/zynq-7000/sw/zynq-7000/standalone_domain/bsplib/lib -o "wolfSSL_blank.elf"  ./src/wolfcrypt/src/aes.o ./src/wolfcrypt/src/arc4.o ./src/wolfcrypt/src/asm.o ./src/wolfcrypt/src/asn.o ./src/wolfcrypt/src/async.o ./src/wolfcrypt/src/blake2b.o ./src/wolfcrypt/src/blake2s.o ./src/wolfcrypt/src/camellia.o ./src/wolfcrypt/src/chacha.o ./src/wolfcrypt/src/chacha20_poly1305.o ./src/wolfcrypt/src/cmac.o ./src/wolfcrypt/src/coding.o ./src/wolfcrypt/src/compress.o ./src/wolfcrypt/src/cpuid.o ./src/wolfcrypt/src/cryptocb.o ./src/wolfcrypt/src/curve25519.o ./src/wolfcrypt/src/curve448.o ./src/wolfcrypt/src/des3.o ./src/wolfcrypt/src/dh.o ./src/wolfcrypt/src/dsa.o ./src/wolfcrypt/src/ecc.o ./src/wolfcrypt/src/ecc_fp.o ./src/wolfcrypt/src/ed25519.o ./src/wolfcrypt/src/ed448.o ./src/wolfcrypt/src/error.o ./src/wolfcrypt/src/evp.o ./src/wolfcrypt/src/fe_448.o ./src/wolfcrypt/src/fe_low_mem.o ./src/wolfcrypt/src/fe_operations.o ./src/wolfcrypt/src/fips.o ./src/wolfcrypt/src/fips_test.o ./src/wolfcrypt/src/ge_448.o ./src/wolfcrypt/src/ge_low_mem.o ./src/wolfcrypt/src/ge_operations.o ./src/wolfcrypt/src/hash.o ./src/wolfcrypt/src/hc128.o ./src/wolfcrypt/src/hmac.o ./src/wolfcrypt/src/idea.o ./src/wolfcrypt/src/integer.o ./src/wolfcrypt/src/logging.o ./src/wolfcrypt/src/md2.o ./src/wolfcrypt/src/md4.o ./src/wolfcrypt/src/md5.o ./src/wolfcrypt/src/memory.o ./src/wolfcrypt/src/misc.o ./src/wolfcrypt/src/pkcs12.o ./src/wolfcrypt/src/pkcs7.o ./src/wolfcrypt/src/poly1305.o ./src/wolfcrypt/src/pwdbased.o ./src/wolfcrypt/src/rabbit.o ./src/wolfcrypt/src/random.o ./src/wolfcrypt/src/rc2.o ./src/wolfcrypt/src/ripemd.o ./src/wolfcrypt/src/rsa.o ./src/wolfcrypt/src/selftest.o ./src/wolfcrypt/src/sha.o ./src/wolfcrypt/src/sha256.o ./src/wolfcrypt/src/sha3.o ./src/wolfcrypt/src/sha512.o ./src/wolfcrypt/src/signature.o ./src/wolfcrypt/src/sp_arm32.o ./src/wolfcrypt/src/sp_arm64.o ./src/wolfcrypt/src/sp_armthumb.o ./src/wolfcrypt/src/sp_c32.o ./src/wolfcrypt/src/sp_c64.o ./src/wolfcrypt/src/sp_cortexm.o ./src/wolfcrypt/src/sp_dsp32.o ./src/wolfcrypt/src/sp_int.o ./src/wolfcrypt/src/sp_x86_64.o ./src/wolfcrypt/src/srp.o ./src/wolfcrypt/src/tfm.o ./src/wolfcrypt/src/wc_dsp.o ./src/wolfcrypt/src/wc_encrypt.o ./src/wolfcrypt/src/wc_pkcs11.o ./src/wolfcrypt/src/wc_port.o ./src/wolfcrypt/src/wolfcrypt_first.o ./src/wolfcrypt/src/wolfcrypt_last.o ./src/wolfcrypt/src/wolfevent.o ./src/wolfcrypt/src/wolfmath.o  ./src/src/bio.o ./src/src/crl.o ./src/src/internal.o ./src/src/keys.o ./src/src/ocsp.o ./src/src/sniffer.o ./src/src/ssl.o ./src/src/tls.o ./src/src/tls13.o ./src/src/wolfio.o  ./src/IDE/XilinxSDK/wolfssl_example.o   -l-Wl,--start-group,-lxil,-lgcc,-lc,--end-group -l-Wl,--start-group,-lxil,-llwip4,-lgcc,-lc,--end-group
c:/xilinx/vitis/2020.2/gnu/aarch64/nt/aarch64-none/x86_64-oesdk-mingw32/usr/bin/aarch64-xilinx-elf/../../libexec/aarch64-xilinx-elf/gcc/aarch64-xilinx-elf/9.2.0/real-ld.exe: cannot find -l-Wl,--start-group,-lxil,-lgcc,-lc,--end-group
c:/xilinx/vitis/2020.2/gnu/aarch64/nt/aarch64-none/x86_64-oesdk-mingw32/usr/bin/aarch64-xilinx-elf/../../libexec/aarch64-xilinx-elf/gcc/aarch64-xilinx-elf/9.2.0/real-ld.exe: cannot find -l-Wl,--start-group,-lxil,-llwip4,-lgcc,-lc,--end-group
collect2.exe: error: ld returned 1 exit status
make[1]: *** [makefile:42: wolfSSL_blank.elf] Error 1
make: *** [makefile:33: all] Error 2

another question: is it at all possible to use the library without an OS, i.e. as a standalone domain?

kind regards
Tom

Share

Re: How to use wolfCrypt (RSA, ECDSA) in Vitis 2020.2

Hi Tom,

Something with your library configuration for the link step looks wrong.


`cannot find -l-Wl,--start-group,-lxil,-lgcc,-lc,--end-group`. That is not valid syntax... the leading `-l` should not be there. Please double check your library settings in your project.

Thanks,
David Garske, wolfSSL

Share