code: func (csp *CSP) AddWrapper(t reflect.Type, w interface{}) error {
  	if t == nil {
  		return errors.Errorf("type cannot be nil")
  	}
  	if w == nil {
  		return errors.Errorf("wrapper cannot be nil")
  	}
  	switch dt := w.(type) {
  	case KeyGenerator:
  		csp.KeyGenerators[t] = dt
  	case KeyImporter:
  		csp.KeyImporters[t] = dt
  	case KeyDeriver:
  		csp.KeyDerivers[t] = dt
  	case Encryptor:
  		csp.Encryptors[t] = dt
  	case Decryptor:
  		csp.Decryptors[t] = dt
  	case Signer:
  		csp.Signers[t] = dt
  	case Verifier:
  		csp.Verifiers[t] = dt
  	case Hasher:
  		csp.Hashers[t] = dt
  	default:
  		return errors.Errorf("wrapper type not valid, must be on of: KeyGenerator, KeyDeriver, KeyImporter, Encryptor, Decryptor, Signer, Verifier, Hasher")
  	}
  	return nil
  }
docs: // AddWrapper binds the passed type to the passed wrapper.
  // Notice that that wrapper must be an instance of one of the following interfaces:
  // KeyGenerator, KeyDeriver, KeyImporter, Encryptor, Decryptor, Signer, Verifier, Hasher.