Class DefaultCouponCodeCipherTextGenerationStrategy

java.lang.Object
de.hybris.platform.couponservices.couponcodegeneration.impl.AbstractCouponCodeGenerationStrategy
de.hybris.platform.couponservices.couponcodegeneration.impl.DefaultCouponCodeCipherTextGenerationStrategy
All Implemented Interfaces:
CouponCodeCipherTextGenerationStrategy, org.springframework.beans.factory.InitializingBean

public class DefaultCouponCodeCipherTextGenerationStrategy extends AbstractCouponCodeGenerationStrategy implements CouponCodeCipherTextGenerationStrategy, org.springframework.beans.factory.InitializingBean
  • Constructor Details

    • DefaultCouponCodeCipherTextGenerationStrategy

      public DefaultCouponCodeCipherTextGenerationStrategy()
  • Method Details

    • afterPropertiesSet

      public void afterPropertiesSet()
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
    • generateCipherText

      public String generateCipherText(MultiCodeCouponModel coupon, String clearText, int length)
      Description copied from interface: CouponCodeCipherTextGenerationStrategy
      returns the generated cipher-text part of the coupon code for the given clearText with the given length
      Specified by:
      generateCipherText in interface CouponCodeCipherTextGenerationStrategy
    • encrypt

      protected byte[] encrypt(MultiCodeCouponModel coupon, String clearText)
      encrypts the given cleartext using the signature defined on the coupon.
    • constructCipherText

      protected final String constructCipherText(MultiCodeCouponModel coupon, int[] cipherTextInput)
      constructs the ciphertext based on the given input byte array.
    • transform

      protected int[] transform(byte[] encryptedData, int length)
      transforms the given input of 16-byte array into an array of ints of specified length. Each of the resulting ints is composed of three (unsigned) bytes (using the lower 24 bits of the int).
    • getCipher

      protected Cipher getCipher(MultiCodeCouponModel coupon) throws NoSuchAlgorithmException
      Throws:
      NoSuchAlgorithmException
    • decodeSignature

      protected byte[] decodeSignature(MultiCodeCouponModel coupon)
      decodes the coupon.signature via Base64.decode(String).
    • checkLength

      protected void checkLength(int length)
      checks that the given length is supported (2,4,6,8,12,16,20,24,28,32).
    • checkLength

      protected void checkLength(String clearText)
      checks that the given clearText is of allowed length (such that clearText.getBytes().length <= 16))
    • getConfigurationService

      protected ConfigurationService getConfigurationService()
    • setConfigurationService

      public void setConfigurationService(ConfigurationService configurationService)
    • getLengthToIntMapping

      protected Map<Integer,Integer> getLengthToIntMapping()
    • setLengthToIntMapping

      public void setLengthToIntMapping(Map<Integer,Integer> lengthToIntMapping)
      This mapping defines how many input int values are needed for a given length of cipher-text. For each 2 characters of ciphertext one input int is needed. Only the lower three bytes of an int are used. Therefore, the default mapping is:
       4  characters -> 2 bytes  -> 1 int
       6  characters -> 3 bytes  -> 1 int
       8  characters -> 4 bytes  -> 2 ints
       12 characters -> 6 bytes  -> 2 ints
       16 characters -> 8 bytes  -> 3 ints
       20 characters -> 10 bytes -> 4 ints
       28 characters -> 14 bytes -> 5 ints
       32 characters -> 16 bytes -> 6 ints