Changes between Initial Version and Version 1 of newport/encryption


Ignore:
Timestamp:
05/23/2019 10:51:37 PM (5 months ago)
Author:
Tim Harvey
Comment:

initial page

Legend:

Unmodified
Added
Removed
Modified
  • newport/encryption

    v1 v1  
     1[[PageOutline]]
     2
     3= OcteonTX Encryption
     4
     5== Compression / Decompression hardware engine (ZIP)
     6The ThunderX SoC's contains 2x compression/decompression hardware engines (ZIP unit)
     7
     8The ZIP engine supports hardware accelerated compression and decompression. It includes 2 independent ZIP cores and supports:
     9 * DEFLATE compression and decompression (RFC 1951)
     10 * LZS compression and decompression (RFC 2395 and ANSI X3.241-1994)
     11 * ADLER32 and CRC32 checksums for ZLIB (RFC 1950) and GZIP (RFC 1952)
     12 * The ZIP engine is presented as a PCI device. It supports DMA and scatter-gather.
     13
     14== Cryptographic Accelerator Unit (CPT)
     15The ThunderX SoC's contain a Cryptographic Accelerator Unit (CPT) featuring:
     16 * Symmetric CPT unit
     17  * 16 SR-IOV compatible virtual functions (VFs) and related queues (VQs) shared with asymmetric
     18  * 8 engine-groups
     19  * 10 !GigaCypher Symmetric Cryptographic Engines (SEs)
     20  * AES256 (XCBC, CCM, CTR, ECB, CBC, GCM, OFM, CFB, XTS)
     21  * AES512
     22  * 3DES
     23  * CRC
     24  * Hashes: SHA1, SHA2 (SHA224, SHA384, SHA512), SHA3, MD5
     25  * Up to 16 Gbit/sec/coprocessor-GHz aggregate bulk crypto (AES128 at IMIX sizes) encryption/decryption
     26  * Up to 8 Gbit/sec/coprocessor-GHz aggregate inline IPSEC large packet encryption/decryption
     27  * Up to 5 (TBD) Gbit/sec/coprocessor-GHz inline SSL large record encryption/decryption
     28 * Asymmetric CPT unit
     29  * 16 SR-IOV compatible virtual functions (VFs) and related queues (VQs) shared with symmetric
     30  * 8 engine-groups
     31  * 6 !GigaCypher Asymmetric Cryptographic Engines (AEs)
     32  * Modular exponentiation up to 8 Kbit (RSA 2048, RSA 4096, RSA 8192, DH)
     33  * RSA encrypt/decrypt – up to 8192 bits
     34  * Prime-field Elliptic Curve (ECC) point multiplication
     35  * P256, P384, P521
     36  * Known-point optimization (50%+ of point multiplies are known point)
     37  * Up to 16K P256 ECC fixed-point multiplies/sec/coprocessor-GHz
     38  * Up to 7.1K P256 ECC unknown-point multiplies/sec/coprocessor-GHz Cavium  Confidential For Up to 5.4K 2048-bit RSA operations/sec/coprocessor-GHz
     39
     40
     41== Linux Drivers
     42The Compression / Decompression hardware engine (ZIP) is supported by a Linux driver since v4.12 in {{{drivers/crypto/cavium/zip}}} enabled via {{{CONFIG_CRYPTO_DEV_CAVIUM_ZIP}}}. This driver registers 'deflate' and 'lzs' algorithms with the Linux crypto subsystem via {{{crypto_register_alg}}} and {{{crypto_register_scomp}}} calls.
     43
     44The Cryptographic Accelerator Unit (CPT) is supported by a Linux driver since v4.11 in {{{drivers/crpyto/cavium/cpt}}} enabled via {{{CONFIG_CAVIUM_CPT}}}. This driver registers 'xts(aes), 'cbc(aes)',
     45'ecb(aes)', 'cfb(aes)', and 'cbc(des3_ede)' algorithms with the Linux crypto subsystem via {{{crypto_register_algs}}} call.
     46
     47The CPT driver requires binary firmware be installed in {{{/lib/firmware}}}:
     48{{{#!bash
     49cd /lib/firmware
     50wget http://dev.gateworks.com/images/cpt8x-mc-ae.out
     51wget http://dev.gateworks.com/images/cpt8x-mc-se.out
     52}}}
     53
     54Once enabled and firmware loaded, {{{/proc/crypto}}} will list out the system cipher and algorithm support:
     55{{{#!bash
     56# cat /proc/crypto
     57name         : ecb(des3_ede)
     58driver       : cavium-ecb-des3_ede
     59module       : cptvf
     60priority     : 4001
     61refcnt       : 1
     62selftest     : passed
     63internal     : no
     64type         : ablkcipher
     65async        : yes
     66blocksize    : 8
     67min keysize  : 24
     68max keysize  : 24
     69ivsize       : 8
     70geniv        : <default>
     71
     72name         : cbc(des3_ede)
     73driver       : cavium-cbc-des3_ede
     74module       : cptvf
     75priority     : 4001
     76refcnt       : 1
     77selftest     : passed
     78internal     : no
     79type         : ablkcipher
     80async        : yes
     81blocksize    : 8
     82min keysize  : 24
     83max keysize  : 24
     84ivsize       : 8
     85geniv        : <default>
     86
     87name         : cfb(aes)
     88driver       : cavium-cfb-aes
     89module       : cptvf
     90priority     : 4001
     91refcnt       : 1
     92selftest     : passed
     93internal     : no
     94type         : ablkcipher
     95async        : yes
     96blocksize    : 16
     97min keysize  : 16
     98max keysize  : 32
     99ivsize       : 16
     100geniv        : <default>
     101
     102name         : ecb(aes)
     103driver       : cavium-ecb-aes
     104module       : cptvf
     105priority     : 4001
     106refcnt       : 1
     107selftest     : passed
     108internal     : no
     109type         : ablkcipher
     110async        : yes
     111blocksize    : 16
     112min keysize  : 16
     113max keysize  : 32
     114ivsize       : 16
     115geniv        : <default>
     116
     117name         : cbc(aes)
     118driver       : cavium-cbc-aes
     119module       : cptvf
     120priority     : 4001
     121refcnt       : 1
     122selftest     : passed
     123internal     : no
     124type         : ablkcipher
     125async        : yes
     126blocksize    : 16
     127min keysize  : 16
     128max keysize  : 32
     129ivsize       : 16
     130geniv        : <default>
     131
     132name         : xts(aes)
     133driver       : cavium-xts-aes
     134module       : cptvf
     135priority     : 4001
     136refcnt       : 1
     137selftest     : passed
     138internal     : no
     139type         : ablkcipher
     140async        : yes
     141blocksize    : 16
     142min keysize  : 32
     143max keysize  : 64
     144ivsize       : 16
     145geniv        : <default>
     146
     147name         : crc32c
     148driver       : crc32c-arm64-ce
     149module       : crc32_ce
     150priority     : 200
     151refcnt       : 1
     152selftest     : passed
     153internal     : no
     154type         : shash
     155blocksize    : 1
     156digestsize   : 4
     157
     158name         : crc32
     159driver       : crc32-arm64-ce
     160module       : crc32_ce
     161priority     : 200
     162refcnt       : 1
     163selftest     : passed
     164internal     : no
     165type         : shash
     166blocksize    : 1
     167digestsize   : 4
     168
     169name         : crct10dif
     170driver       : crct10dif-arm64-ce
     171module       : crct10dif_ce
     172priority     : 200
     173refcnt       : 1
     174selftest     : passed
     175internal     : no
     176type         : shash
     177blocksize    : 1
     178digestsize   : 2
     179
     180name         : lzs
     181driver       : lzs-scomp
     182module       : kernel
     183priority     : 300
     184refcnt       : 1
     185selftest     : passed
     186internal     : no
     187type         : scomp
     188
     189name         : deflate
     190driver       : deflate-scomp
     191module       : kernel
     192priority     : 300
     193refcnt       : 1
     194selftest     : passed
     195internal     : no
     196type         : scomp
     197
     198name         : lzs
     199driver       : lzs-generic
     200module       : kernel
     201priority     : 300
     202refcnt       : 1
     203selftest     : passed
     204internal     : no
     205type         : compression
     206
     207name         : deflate
     208driver       : deflate-generic
     209module       : kernel
     210priority     : 300
     211refcnt       : 1
     212selftest     : passed
     213internal     : no
     214type         : compression
     215
     216name         : jitterentropy_rng
     217driver       : jitterentropy_rng
     218module       : kernel
     219priority     : 100
     220refcnt       : 1
     221selftest     : passed
     222internal     : no
     223type         : rng
     224seedsize     : 0
     225
     226name         : stdrng
     227driver       : drbg_nopr_hmac_sha256
     228module       : kernel
     229priority     : 207
     230refcnt       : 1
     231selftest     : passed
     232internal     : no
     233type         : rng
     234seedsize     : 0
     235
     236name         : stdrng
     237driver       : drbg_nopr_hmac_sha512
     238module       : kernel
     239priority     : 206
     240refcnt       : 1
     241selftest     : passed
     242internal     : no
     243type         : rng
     244seedsize     : 0
     245
     246name         : stdrng
     247driver       : drbg_nopr_hmac_sha384
     248module       : kernel
     249priority     : 205
     250refcnt       : 1
     251selftest     : passed
     252internal     : no
     253type         : rng
     254seedsize     : 0
     255
     256name         : stdrng
     257driver       : drbg_nopr_hmac_sha1
     258module       : kernel
     259priority     : 204
     260refcnt       : 1
     261selftest     : passed
     262internal     : no
     263type         : rng
     264seedsize     : 0
     265
     266name         : stdrng
     267driver       : drbg_pr_hmac_sha256
     268module       : kernel
     269priority     : 203
     270refcnt       : 1
     271selftest     : passed
     272internal     : no
     273type         : rng
     274seedsize     : 0
     275
     276name         : stdrng
     277driver       : drbg_pr_hmac_sha512
     278module       : kernel
     279priority     : 202
     280refcnt       : 1
     281selftest     : passed
     282internal     : no
     283type         : rng
     284seedsize     : 0
     285
     286name         : stdrng
     287driver       : drbg_pr_hmac_sha384
     288module       : kernel
     289priority     : 201
     290refcnt       : 1
     291selftest     : passed
     292internal     : no
     293type         : rng
     294seedsize     : 0
     295
     296name         : stdrng
     297driver       : drbg_pr_hmac_sha1
     298module       : kernel
     299priority     : 200
     300refcnt       : 1
     301selftest     : passed
     302internal     : no
     303type         : rng
     304seedsize     : 0
     305
     306name         : stdrng
     307driver       : ansi_cprng
     308module       : kernel
     309priority     : 100
     310refcnt       : 1
     311selftest     : passed
     312internal     : no
     313type         : rng
     314seedsize     : 48
     315
     316name         : crct10dif
     317driver       : crct10dif-generic
     318module       : kernel
     319priority     : 100
     320refcnt       : 2
     321selftest     : passed
     322internal     : no
     323type         : shash
     324blocksize    : 1
     325digestsize   : 2
     326
     327name         : crc32
     328driver       : crc32-generic
     329module       : kernel
     330priority     : 100
     331refcnt       : 1
     332selftest     : passed
     333internal     : no
     334type         : shash
     335blocksize    : 1
     336digestsize   : 4
     337
     338name         : crc32c
     339driver       : crc32c-generic
     340module       : kernel
     341priority     : 100
     342refcnt       : 2
     343selftest     : passed
     344internal     : no
     345type         : shash
     346blocksize    : 1
     347digestsize   : 4
     348
     349name         : aes
     350driver       : aes-generic
     351module       : kernel
     352priority     : 100
     353refcnt       : 1
     354selftest     : passed
     355internal     : no
     356type         : cipher
     357blocksize    : 16
     358min keysize  : 16
     359max keysize  : 32
     360
     361name         : sha224
     362driver       : sha224-generic
     363module       : kernel
     364priority     : 0
     365refcnt       : 1
     366selftest     : passed
     367internal     : no
     368type         : shash
     369blocksize    : 64
     370digestsize   : 28
     371
     372name         : sha256
     373driver       : sha256-generic
     374module       : kernel
     375priority     : 0
     376refcnt       : 1
     377selftest     : passed
     378internal     : no
     379type         : shash
     380blocksize    : 64
     381digestsize   : 32
     382
     383name         : sha1
     384driver       : sha1-generic
     385module       : kernel
     386priority     : 0
     387refcnt       : 1
     388selftest     : passed
     389internal     : no
     390type         : shash
     391blocksize    : 64
     392digestsize   : 20
     393
     394name         : digest_null
     395driver       : digest_null-generic
     396module       : kernel
     397priority     : 0
     398refcnt       : 1
     399selftest     : passed
     400internal     : no
     401type         : shash
     402blocksize    : 1
     403digestsize   : 0
     404
     405name         : compress_null
     406driver       : compress_null-generic
     407module       : kernel
     408priority     : 0
     409refcnt       : 1
     410selftest     : passed
     411internal     : no
     412type         : compression
     413
     414name         : ecb(cipher_null)
     415driver       : ecb-cipher_null
     416module       : kernel
     417priority     : 100
     418refcnt       : 1
     419selftest     : passed
     420internal     : no
     421type         : blkcipher
     422blocksize    : 1
     423min keysize  : 0
     424max keysize  : 0
     425ivsize       : 0
     426geniv        : <default>
     427
     428name         : cipher_null
     429driver       : cipher_null-generic
     430module       : kernel
     431priority     : 0
     432refcnt       : 1
     433selftest     : passed
     434internal     : no
     435type         : cipher
     436blocksize    : 1
     437min keysize  : 0
     438max keysize  : 0
     439
     440name         : aes
     441driver       : aes-arm64
     442module       : kernel
     443priority     : 200
     444refcnt       : 1
     445selftest     : passed
     446internal     : no
     447type         : cipher
     448blocksize    : 16
     449min keysize  : 16
     450max keysize  : 32
     451
     452name         : sha224
     453driver       : sha224-arm64-neon
     454module       : kernel
     455priority     : 150
     456refcnt       : 1
     457selftest     : passed
     458internal     : no
     459type         : shash
     460blocksize    : 64
     461digestsize   : 28
     462
     463name         : sha256
     464driver       : sha256-arm64-neon
     465module       : kernel
     466priority     : 150
     467refcnt       : 1
     468selftest     : passed
     469internal     : no
     470type         : shash
     471blocksize    : 64
     472digestsize   : 32
     473
     474name         : sha224
     475driver       : sha224-arm64
     476module       : kernel
     477priority     : 100
     478refcnt       : 1
     479selftest     : passed
     480internal     : no
     481type         : shash
     482blocksize    : 64
     483digestsize   : 28
     484
     485name         : sha256
     486driver       : sha256-arm64
     487module       : kernel
     488priority     : 100
     489refcnt       : 1
     490selftest     : passed
     491internal     : no
     492type         : shash
     493blocksize    : 64
     494digestsize   : 32
     495
     496name         : xts(aes)
     497driver       : xts-aes-ce
     498module       : kernel
     499priority     : 300
     500refcnt       : 1
     501selftest     : passed
     502internal     : no
     503type         : skcipher
     504async        : yes
     505blocksize    : 16
     506min keysize  : 32
     507max keysize  : 64
     508ivsize       : 16
     509chunksize    : 16
     510walksize     : 16
     511
     512name         : ctr(aes)
     513driver       : ctr-aes-ce
     514module       : kernel
     515priority     : 300
     516refcnt       : 1
     517selftest     : passed
     518internal     : no
     519type         : skcipher
     520async        : yes
     521blocksize    : 1
     522min keysize  : 16
     523max keysize  : 32
     524ivsize       : 16
     525chunksize    : 16
     526walksize     : 16
     527
     528name         : cbc(aes)
     529driver       : cbc-aes-ce
     530module       : kernel
     531priority     : 300
     532refcnt       : 1
     533selftest     : passed
     534internal     : no
     535type         : skcipher
     536async        : yes
     537blocksize    : 16
     538min keysize  : 16
     539max keysize  : 32
     540ivsize       : 16
     541chunksize    : 16
     542walksize     : 16
     543
     544name         : ecb(aes)
     545driver       : ecb-aes-ce
     546module       : kernel
     547priority     : 300
     548refcnt       : 1
     549selftest     : passed
     550internal     : no
     551type         : skcipher
     552async        : yes
     553blocksize    : 16
     554min keysize  : 16
     555max keysize  : 32
     556ivsize       : 0
     557chunksize    : 16
     558walksize     : 16
     559
     560name         : cbcmac(aes)
     561driver       : cbcmac-aes-ce
     562module       : kernel
     563priority     : 300
     564refcnt       : 1
     565selftest     : passed
     566internal     : no
     567type         : shash
     568blocksize    : 1
     569digestsize   : 16
     570
     571name         : xcbc(aes)
     572driver       : xcbc-aes-ce
     573module       : kernel
     574priority     : 300
     575refcnt       : 1
     576selftest     : passed
     577internal     : no
     578type         : shash
     579blocksize    : 16
     580digestsize   : 16
     581
     582name         : cmac(aes)
     583driver       : cmac-aes-ce
     584module       : kernel
     585priority     : 300
     586refcnt       : 1
     587selftest     : passed
     588internal     : no
     589type         : shash
     590blocksize    : 16
     591digestsize   : 16
     592
     593name         : __xts(aes)
     594driver       : __xts-aes-ce
     595module       : kernel
     596priority     : 300
     597refcnt       : 1
     598selftest     : passed
     599internal     : yes
     600type         : skcipher
     601async        : no
     602blocksize    : 16
     603min keysize  : 32
     604max keysize  : 64
     605ivsize       : 16
     606chunksize    : 16
     607walksize     : 16
     608
     609name         : ctr(aes)
     610driver       : ctr-aes-ce
     611module       : kernel
     612priority     : 299
     613refcnt       : 1
     614selftest     : passed
     615internal     : no
     616type         : skcipher
     617async        : no
     618blocksize    : 1
     619min keysize  : 16
     620max keysize  : 32
     621ivsize       : 16
     622chunksize    : 16
     623walksize     : 16
     624
     625name         : __ctr(aes)
     626driver       : __ctr-aes-ce
     627module       : kernel
     628priority     : 300
     629refcnt       : 1
     630selftest     : passed
     631internal     : yes
     632type         : skcipher
     633async        : no
     634blocksize    : 1
     635min keysize  : 16
     636max keysize  : 32
     637ivsize       : 16
     638chunksize    : 16
     639walksize     : 16
     640
     641name         : __cbc(aes)
     642driver       : __cbc-aes-ce
     643module       : kernel
     644priority     : 300
     645refcnt       : 1
     646selftest     : passed
     647internal     : yes
     648type         : skcipher
     649async        : no
     650blocksize    : 16
     651min keysize  : 16
     652max keysize  : 32
     653ivsize       : 16
     654chunksize    : 16
     655walksize     : 16
     656
     657name         : __ecb(aes)
     658driver       : __ecb-aes-ce
     659module       : kernel
     660priority     : 300
     661refcnt       : 1
     662selftest     : passed
     663internal     : yes
     664type         : skcipher
     665async        : no
     666blocksize    : 16
     667min keysize  : 16
     668max keysize  : 32
     669ivsize       : 0
     670chunksize    : 16
     671walksize     : 16
     672
     673name         : ccm(aes)
     674driver       : ccm-aes-ce
     675module       : kernel
     676priority     : 300
     677refcnt       : 1
     678selftest     : passed
     679internal     : no
     680type         : aead
     681async        : no
     682blocksize    : 1
     683ivsize       : 16
     684maxauthsize  : 16
     685geniv        : <none>
     686
     687name         : aes
     688driver       : aes-ce
     689module       : kernel
     690priority     : 250
     691refcnt       : 1
     692selftest     : passed
     693internal     : no
     694type         : cipher
     695blocksize    : 16
     696min keysize  : 16
     697max keysize  : 32
     698
     699name         : gcm(aes)
     700driver       : gcm-aes-ce
     701module       : kernel
     702priority     : 300
     703refcnt       : 1
     704selftest     : passed
     705internal     : no
     706type         : aead
     707async        : no
     708blocksize    : 1
     709ivsize       : 12
     710maxauthsize  : 16
     711geniv        : <none>
     712
     713name         : ghash
     714driver       : ghash-ce
     715module       : kernel
     716priority     : 200
     717refcnt       : 1
     718selftest     : passed
     719internal     : no
     720type         : shash
     721blocksize    : 16
     722digestsize   : 16
     723
     724name         : sha256
     725driver       : sha256-ce
     726module       : kernel
     727priority     : 200
     728refcnt       : 1
     729selftest     : passed
     730internal     : no
     731type         : shash
     732blocksize    : 64
     733digestsize   : 32
     734
     735name         : sha224
     736driver       : sha224-ce
     737module       : kernel
     738priority     : 200
     739refcnt       : 1
     740selftest     : passed
     741internal     : no
     742type         : shash
     743blocksize    : 64
     744digestsize   : 28
     745
     746name         : sha1
     747driver       : sha1-ce
     748module       : kernel
     749priority     : 200
     750refcnt       : 1
     751selftest     : passed
     752internal     : no
     753type         : shash
     754blocksize    : 64
     755digestsize   : 20
     756
     757}}}
     758
     759For information on how to use the Linux Kernel Cyprto API consult the kernel documentation:
     760- https://www.kernel.org/doc/html/latest/crypto/index.html