20 Jun, 2016

2 commits


15 Jun, 2016

5 commits

  • Return the raw key with no other processing so that the caller
    can copy it or MPI parse it, etc.

    The scope is to have only one ANS.1 parser for all RSA
    implementations.

    Update the RSA software implementation so that it does
    the MPI conversion on top.

    Signed-off-by: Tudor Ambarus
    Signed-off-by: Herbert Xu

    Tudor Ambarus
     
  • The TFM object maintains the key for the CTR DRBG.

    Signed-off-by: Stephan Mueller
    Signed-off-by: Herbert Xu

    Stephan Mueller
     
  • The CTR DRBG update function performs a full CTR AES operation including
    the XOR with "plaintext" data. Hence, remove the XOR from the code and
    use the CTR mode to do the XOR.

    Signed-off-by: Stephan Mueller
    Signed-off-by: Herbert Xu

    Stephan Mueller
     
  • Hardware cipher implementation may require aligned buffers. All buffers
    that potentially are processed with a cipher are now aligned.

    Signed-off-by: Stephan Mueller
    Signed-off-by: Herbert Xu

    Stephan Mueller
     
  • The CTR DRBG derives its random data from the CTR that is encrypted with
    AES.

    This patch now changes the CTR DRBG implementation such that the
    CTR AES mode is employed. This allows the use of steamlined CTR AES
    implementation such as ctr-aes-aesni.

    Unfortunately there are the following subtile changes we need to apply
    when using the CTR AES mode:

    - the CTR mode increments the counter after the cipher operation, but
    the CTR DRBG requires the increment before the cipher op. Hence, the
    crypto_inc is applied to the counter (drbg->V) once it is
    recalculated.

    - the CTR mode wants to encrypt data, but the CTR DRBG is interested in
    the encrypted counter only. The full CTR mode is the XOR of the
    encrypted counter with the plaintext data. To access the encrypted
    counter, the patch uses a NULL data vector as plaintext to be
    "encrypted".

    Signed-off-by: Stephan Mueller
    Signed-off-by: Herbert Xu

    Stephan Mueller
     

13 Jun, 2016

3 commits

  • Add support for the Amlogic Meson SoCs hardware random generator.

    Signed-off-by: Neil Armstrong
    Signed-off-by: Herbert Xu

    Neil Armstrong
     
  • The __raw IO functions are not endian safe, so use the readl_relaxed
    and writel_relaxed versions of these.

    Signed-off-by: Ben Dooks
    Signed-off-by: Herbert Xu

    Ben Dooks
     
  • alloc_workqueue replaces deprecated create_workqueue().

    The workqueue device_reset_wq has workitem &reset_data->reset_work per
    adf_reset_dev_data. The workqueue pf2vf_resp_wq is a workqueue for
    PF2VF responses has workitem &pf2vf_resp->pf2vf_resp_work per pf2vf_resp.
    The workqueue adf_vf_stop_wq is used to call adf_dev_stop()
    asynchronously.

    Dedicated workqueues have been used in all cases since the workitems
    on the workqueues are involved in operation of crypto which can be used in
    the IO path which is depended upon during memory reclaim. Hence,
    WQ_MEM_RECLAIM has been set to gurantee forward progress under memory
    pressure.
    Since there are only a fixed number of work items, explicit concurrency
    limit is unnecessary.

    Signed-off-by: Bhaktipriya Shridhar
    Acked-by: Tejun Heo
    Signed-off-by: Herbert Xu

    Bhaktipriya Shridhar
     

08 Jun, 2016

7 commits

  • This will allow IPSEC on SEC1

    Signed-off-by: Christophe Leroy
    Signed-off-by: Herbert Xu

    LEROY Christophe
     
  • SEC1 doesn't have IPSEC_ESP descriptor type but it is able to perform
    IPSEC using HMAC_SNOOP_NO_AFEU, which is also existing on SEC2
    In order to be able to define descriptors templates for SEC1 without
    breaking SEC2+, we have to give lower priority to HMAC_SNOOP_NO_AFEU
    so that SEC2+ selects IPSEC_ESP and not HMAC_SNOOP_NO_AFEU which is
    less performant.

    This is done by adding a priority field in the template. If the field
    is 0, we use the default priority, otherwise we used the one in the
    field.

    Signed-off-by: Christophe Leroy
    Signed-off-by: Herbert Xu

    LEROY Christophe
     
  • Signed-off-by: Christophe Leroy
    Signed-off-by: Herbert Xu

    LEROY Christophe
     
  • This patchs enhances the IPSEC_ESP related functions for them to
    also supports the same operations with descriptor type
    HMAC_SNOOP_NO_AFEU.

    The differences between the two descriptor types are:
    * pointeurs 2 and 3 are swaped (Confidentiality key and
    Primary EU Context IN)
    * HMAC_SNOOP_NO_AFEU has CICV out in pointer 6
    * HMAC_SNOOP_NO_AFEU has no primary EU context out so we get it
    from the end of data out

    Signed-off-by: Christophe Leroy
    Signed-off-by: Herbert Xu

    LEROY Christophe
     
  • In preparation of IPSEC for SEC1, first step is to make the mapping
    helpers more generic so that they can also be used by AEAD functions.

    First, the functions are moved before IPSEC functions in talitos.c

    talitos_sg_unmap() and unmap_sg_talitos_ptr() are merged as they
    are quite similar, the second one handling the SEC1 case an calling
    the first one for SEC2

    map_sg_in_talitos_ptr() and map_sg_out_talitos_ptr() are merged
    into talitos_sg_map() and enhenced to support offseted zones
    as used for AEAD. The actual mapping is now performed outside that
    helper. The DMA sync is also done outside to not make it several
    times.

    talitos_edesc_alloc() size calculation are fixed to also take into
    account AEAD specific parts also for SEC1

    Signed-off-by: Christophe Leroy
    Signed-off-by: Herbert Xu

    LEROY Christophe
     
  • In order to be able to use the mapping/unmapping helpers for IPSEC
    it needs to be move upper in the file

    Signed-off-by: Christophe Leroy
    Signed-off-by: Herbert Xu

    LEROY Christophe
     
  • Use helper for all modifications to talitos_ptr in preparation to
    the implementation of AEAD for SEC1

    to_talitos_ptr_extent_clear() has been removed in favor of
    to_talitos_ptr_ext_set() to set any value and
    to_talitos_ptr_ext_or() to or the extent field with a value
    name has been shorten to help keeping single lines of 80 chars

    Signed-off-by: Christophe Leroy
    Signed-off-by: Herbert Xu

    LEROY Christophe
     

07 Jun, 2016

6 commits

  • LS1043A has a SEC v5.4 security engine.
    For now don't add rtic or sec_mon subnodes, since these features
    haven't been tested yet.

    Signed-off-by: Horia Geantă
    Signed-off-by: Herbert Xu

    Horia Geantă
     
  • The first read on an Alea takes about 1.8 seconds, more than the
    timeout value waiting for the read. As a consequence, later URB reuse
    causes the warning given below. To avoid this, we increase the wait
    time for the first read on the Alea.

    [ 78.293247] WARNING: CPU: 3 PID: 1892 at drivers/usb/core/urb.c:338 usb_submit_urb+0x2b4/0x580 [usbcore]
    [ 78.293250] URB ffff8802135be3c0 submitted while active
    [ 78.293252] Modules linked in: chaoskey(+) rng_core rfcomm binfmt_misc bnep cfg80211 nfsd auth_rpcgss oid_registry nfs_acl nfs lockd grace fscache sunrpc bridge stp llc tun snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic iTCO_wdt iTCO_vendor_support nls_utf8 nls_cp437 vfat fat intel_rapl x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel efi_pstore kvm irqbypass pcspkr btusb btrtl btbcm btintel uvcvideo joydev bluetooth videobuf2_vmalloc videobuf2_memops efivars videobuf2_v4l2 serio_raw i2c_i801 videobuf2_core videodev cdc_mbim media lpc_ich shpchp mfd_core cdc_ncm usbnet mii cdc_wdm cdc_acm evdev snd_hda_intel snd_hda_codec snd_hwdep snd_hda_core i915 snd_pcm snd_timer i2c_algo_bit drm_kms_helper wmi thinkpad_acpi drm nvram mei_me mei snd soundcore rfkill ac battery i2c_core
    [ 78.293335] video button tpm_tis tpm fuse parport_pc ppdev lp parport autofs4 ext4 crc16 jbd2 mbcache algif_skcipher af_alg hid_generic usbhid hid dm_crypt dm_mod sg sr_mod cdrom sd_mod crct10dif_pclmul crc32_pclmul crc32c_intel jitterentropy_rng sha256_generic hmac drbg aesni_intel xhci_pci aes_x86_64 ahci glue_helper xhci_hcd ehci_pci lrw libahci gf128mul ablk_helper cryptd libata sdhci_pci psmouse sdhci scsi_mod ehci_hcd mmc_core usbcore usb_common thermal
    [ 78.293402] CPU: 3 PID: 1892 Comm: hwrng Not tainted 4.7.0-rc1-linux-14+ #16
    [ 78.293405] Hardware name: LENOVO 232577G/232577G, BIOS G2ET92WW (2.52 ) 02/22/2013
    [ 78.293408] 0000000000000000 ffffffff812dfa0f ffff8801fa5b3d68 0000000000000000
    [ 78.293413] ffffffff81072224 ffff8802135be3c0 ffff8801fa5b3db8 ffff880212e44210
    [ 78.293418] 0000000000000040 ffff880209fb32c0 ffff880212e44200 ffffffff8107228f
    [ 78.293422] Call Trace:
    [ 78.293432] [] ? dump_stack+0x5c/0x7d
    [ 78.293437] [] ? __warn+0xc4/0xe0
    [ 78.293441] [] ? warn_slowpath_fmt+0x4f/0x60
    [ 78.293451] [] ? enqueue_task_fair+0xcd2/0x1260
    [ 78.293463] [] ? usb_submit_urb+0x2b4/0x580 [usbcore]
    [ 78.293474] [] ? __pm_runtime_resume+0x55/0x70
    [ 78.293484] [] ? _chaoskey_fill+0x132/0x250 [chaoskey]
    [ 78.293485] usbcore: registered new interface driver chaoskey
    [ 78.293493] [] ? wait_woken+0x90/0x90
    [ 78.293500] [] ? devm_hwrng_register+0x80/0x80 [rng_core]
    [ 78.293505] [] ? chaoskey_rng_read+0x127/0x140 [chaoskey]
    [ 78.293511] [] ? devm_hwrng_register+0x80/0x80 [rng_core]
    [ 78.293515] [] ? hwrng_fillfn+0x6e/0x120 [rng_core]
    [ 78.293520] [] ? kthread+0xcf/0xf0
    [ 78.293529] [] ? ret_from_fork+0x1f/0x40
    [ 78.293535] [] ? kthread_park+0x50/0x50

    Signed-off-by: Bob Ham
    Signed-off-by: Herbert Xu

    Bob Ham
     
  • Adds support for the Araneus Alea I USB hardware Random Number
    Generator which is interfaced with in exactly the same way as the
    Altus Metrum ChaosKey. We just add the appropriate device ID and
    modify the config help text.

    Signed-off-by: Bob Ham
    Signed-off-by: Herbert Xu

    Bob Ham
     
  • Move hash to 0xe to free up the space for acomp/scomp

    Signed-off-by: Giovanni Cabiddu
    Signed-off-by: Herbert Xu

    Giovanni Cabiddu
     
  • Remove unused header cpumask.h from crypto/ablkcipher.c.

    Signed-off-by: Geliang Tang
    Signed-off-by: Herbert Xu

    Geliang Tang
     
  • Algorithms can be registered only once. So skip registration of
    algorithms if already registered (i.e. in case we have two AES cores
    in the system.)

    Signed-off-by: Lokesh Vutla
    Signed-off-by: Tero Kristo
    Signed-off-by: Herbert Xu

    Lokesh Vutla
     

02 Jun, 2016

2 commits

  • Currently there are several checkpatch warnings in the sha1_mb.c file:
    'WARNING: line over 80 characters' in the sha1_mb.c file. Also, the
    syntax of some multi-line comments are not correct. This patch fixes
    these issues.

    Signed-off-by: Megha Dey
    Signed-off-by: Herbert Xu

    Megha Dey
     
  • The CTR DRBG code always set the key for each sym cipher invocation even
    though the key has not been changed.

    The patch ensures that the setkey is only invoked when a new key is
    generated by the DRBG.

    With this patch, the CTR DRBG performance increases by more than 150%.

    Signed-off-by: Stephan Mueller
    Signed-off-by: Herbert Xu

    Stephan Mueller
     

31 May, 2016

15 commits

  • Bring some consistency by:
    1. Replacing fixed-space indentation of structure members with just
    tabs.
    2. Remove indentation in declaration of local variable between type and
    name. Driver was mixing usage of such indentation and lack of it.
    When removing indentation, reorder variables in
    reversed-christmas-tree order with first variables being initialized
    ones.

    Signed-off-by: Krzysztof Kozlowski
    Acked-by: Vladimir Zapolskiy
    Signed-off-by: Herbert Xu

    Krzysztof Kozlowski
     
  • Read the requested number of data from the fifo

    Signed-off-by: Yendapally Reddy Dhananjaya Reddy
    Reviewed-by: Eric Anholt
    Signed-off-by: Herbert Xu

    Yendapally Reddy Dhananjaya Reddy
     
  • Add support for the random number generator to the Northstar Plus
    SoC device tree.

    Signed-off-by: Yendapally Reddy Dhananjaya Reddy
    Signed-off-by: Herbert Xu

    Yendapally Reddy Dhananjaya Reddy
     
  • This supports the random number generator available in NSP SoC.
    Masks the rng interrupt for NSP.

    Signed-off-by: Yendapally Reddy Dhananjaya Reddy
    Acked-by: Eric Anholt
    Signed-off-by: Herbert Xu

    Yendapally Reddy Dhananjaya Reddy
     
  • Document the bindings used by Northstar Plus(NSP) SoC random number
    generator.

    Signed-off-by: Yendapally Reddy Dhananjaya Reddy
    Acked-by: Eric Anholt
    Signed-off-by: Herbert Xu

    Yendapally Reddy Dhananjaya Reddy
     
  • mpi_read_from_buffer() and mpi_read_raw_data() do basically the same thing
    except that the former extracts the number of payload bits from the first
    two bytes of the input buffer.

    Besides that, the data copying logic is exactly the same.

    Replace the open coded buffer to MPI instance conversion by a call to
    mpi_read_raw_data().

    Signed-off-by: Nicolai Stange
    Signed-off-by: Herbert Xu

    Nicolai Stange
     
  • The first two bytes of the input buffer encode its expected length and
    mpi_read_from_buffer() prints a console message if the given buffer is too
    short.

    However, there are some oddities with how this message is printed:
    - It is printed at the default loglevel. This is different from the
    one used in the case that the first two bytes' value is unsupportedly
    large, i.e. KERN_INFO.
    - The format specifier '%d' is used for unsigned ints.
    - It prints the values of nread and *ret_nread. This is redundant since
    the former is always the latter + 1.

    Clean this up as follows:
    - Use pr_info() rather than printk() with no loglevel.
    - Use the format specifiers '%u' in place if '%d'.
    - Do not print the redundant 'nread' but the more helpful 'nbytes' value.

    Signed-off-by: Nicolai Stange
    Signed-off-by: Herbert Xu

    Nicolai Stange
     
  • Currently, if the input buffer is shorter than the expected length as
    indicated by its first two bytes, an MPI instance of this expected length
    will be allocated and filled with as much data as is available. The rest
    will remain uninitialized.

    Instead of leaving this condition undetected, an error code should be
    reported to the caller.

    Since this situation indicates that the input buffer's first two bytes,
    encoding the number of expected bits, are garbled, -EINVAL is appropriate
    here.

    If the input buffer is shorter than indicated by its first two bytes,
    make mpi_read_from_buffer() return -EINVAL.
    Get rid of the 'nread' variable: with the new semantics, the total number
    of bytes read from the input buffer is known in advance.

    Signed-off-by: Nicolai Stange
    Signed-off-by: Herbert Xu

    Nicolai Stange
     
  • Currently, if digsig_verify_rsa() detects that the modulo's length is zero,
    i.e. mlen == 0, it returns -ENOMEM which doesn't really fit here.

    Make digsig_verify_rsa() return -EINVAL upon mlen == 0.

    Signed-off-by: Nicolai Stange
    Signed-off-by: Herbert Xu

    Nicolai Stange
     
  • mpi_read_from_buffer() reads a MPI from a buffer into a newly allocated
    MPI instance. It expects the buffer's leading two bytes to contain the
    number of bits, followed by the actual payload.

    On failure, it returns NULL and updates the in/out argument ret_nread
    somewhat inconsistently:
    - If the given buffer is too short to contain the leading two bytes
    encoding the number of bits or their value is unsupported, then
    ret_nread will be cleared.
    - If the allocation of the resulting MPI instance fails, ret_nread is left
    as is.

    The only user of mpi_read_from_buffer(), digsig_verify_rsa(), simply checks
    for a return value of NULL and returns -ENOMEM if that happens.

    While this is all of cosmetic nature only, there is another error condition
    which currently isn't detectable by the caller of mpi_read_from_buffer():
    if the given buffer is too small to hold the number of bits as encoded in
    its first two bytes, the return value will be non-NULL and *ret_nread > 0.

    In preparation of communicating this condition to the caller, let
    mpi_read_from_buffer() return error values by means of the ERR_PTR()
    mechanism.

    Make the sole caller of mpi_read_from_buffer(), digsig_verify_rsa(),
    check the return value for IS_ERR() rather than == NULL. If IS_ERR() is
    true, return the associated error value rather than the fixed -ENOMEM.

    Signed-off-by: Nicolai Stange
    Signed-off-by: Herbert Xu

    Nicolai Stange
     
  • The number of bits, nbits, is calculated in mpi_read_raw_data() as follows:

    nbits = nbytes * 8;

    Afterwards, the number of leading zero bits of the first byte get
    subtracted:

    nbits -= count_leading_zeros(buffer[0]);

    However, count_leading_zeros() takes an unsigned long and thus,
    the u8 gets promoted to an unsigned long.

    Thus, the above doesn't subtract the number of leading zeros in the most
    significant nonzero input byte from nbits, but the number of leading
    zeros of the most significant nonzero input byte promoted to unsigned long,
    i.e. BITS_PER_LONG - 8 too many.

    Fix this by subtracting

    count_leading_zeros(...) - (BITS_PER_LONG - 8)

    from nbits only.

    Fixes: e1045992949 ("MPILIB: Provide a function to read raw data into an
    MPI")
    Signed-off-by: Nicolai Stange
    Signed-off-by: Herbert Xu

    Nicolai Stange
     
  • In mpi_read_raw_data(), unsigned nbits is calculated as follows:

    nbits = nbytes * 8;

    and redundantly cleared later on if nbytes == 0:

    if (nbytes > 0)
    ...
    else
    nbits = 0;

    Purge this redundant clearing for the sake of clarity.

    Signed-off-by: Nicolai Stange
    Signed-off-by: Herbert Xu

    Nicolai Stange
     
  • mpi_set_buffer() has no in-tree users and similar functionality is provided
    by mpi_read_raw_data().

    Remove mpi_set_buffer().

    Signed-off-by: Nicolai Stange
    Signed-off-by: Herbert Xu

    Nicolai Stange
     
  • This patch fixes the following warning:
    drivers/char/hw_random/stm32-rng.c: In function 'stm32_rng_read':
    drivers/char/hw_random/stm32-rng.c:82:19: warning: 'sr' may be used
    uninitialized in this function

    Reported-by: Sudip Mukherjee
    Suggested-by: Arnd Bergmann
    Cc: Daniel Thompson
    Signed-off-by: Maxime Coquelin
    Reviewed-by: Daniel Thompson
    Signed-off-by: Herbert Xu

    Maxime Coquelin
     
  • Submitters of device tree binding documentation may forget to CC
    the subsystem maintainer if this is missing.

    Signed-off-by: Geert Uytterhoeven
    Cc: Matt Mackall
    Cc: Herbert Xu
    Cc: linux-crypto@vger.kernel.org
    Signed-off-by: Herbert Xu

    Geert Uytterhoeven