• Stephan Mueller's avatar
    crypto: drbg - in-place cipher operation for CTR · 43490e80
    Stephan Mueller authored
    The cipher implementations of the kernel crypto API favor in-place
    cipher operations. Thus, switch the CTR cipher operation in the DRBG to
    perform in-place operations. This is implemented by using the output
    buffer as input buffer and zeroizing it before the cipher operation to
    implement a CTR encryption of a NULL buffer.
    
    The speed improvement is quite visibile with the following comparison
    using the LRNG implementation.
    
    Without the patch set:
    
          16 bytes|           12.267661 MB/s|    61338304 bytes |  5000000213 ns
          32 bytes|           23.603770 MB/s|   118018848 bytes |  5000000073 ns
          64 bytes|           46.732262 MB/s|   233661312 bytes |  5000000241 ns
         128 bytes|           90.038042 MB/s|   450190208 bytes |  5000000244 ns
         256 bytes|          160.399616 MB/s|   801998080 bytes |  5000000393 ns
         512 bytes|          259.878400 MB/s|  1299392000 bytes |  5000001675 ns
        1024 bytes|          386.050662 MB/s|  1930253312 bytes |  5000001661 ns
        2048 bytes|          493.641728 MB/s|  2468208640 bytes |  5000001598 ns
        4096 bytes|          581.835981 MB/s|  2909179904 bytes |  5000003426 ns
    
    With the patch set:
    
          16 bytes |         17.051142 MB/s |     85255712 bytes |  5000000854 ns
          32 bytes |         32.695898 MB/s |    163479488 bytes |  5000000544 ns
          64 bytes |         64.490739 MB/s |    322453696 bytes |  5000000954 ns
         128 bytes |        123.285043 MB/s |    616425216 bytes |  5000000201 ns
         256 bytes |        233.434573 MB/s |   1167172864 bytes |  5000000573 ns
         512 bytes |        384.405197 MB/s |   1922025984 bytes |  5000000671 ns
        1024 bytes |        566.313370 MB/s |   2831566848 bytes |  5000001080 ns
        2048 bytes |        744.518042 MB/s |   3722590208 bytes |  5000000926 ns
        4096 bytes |        867.501670 MB/s |   4337508352 bytes |  5000002181 ns
    Signed-off-by: Stephan Mueller's avatarStephan Mueller <smueller@chronox.de>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    43490e80
drbg.c 57.2 KB