mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

matthew_swift
04.49.2009 9fdb95ca9c3c8e3524845760b81a85c7a4c81a45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
package org.opends.sdk.extensions;
 
 
 
import static com.sun.opends.sdk.messages.Messages.*;
 
import java.io.IOException;
 
import org.opends.sdk.ByteString;
import org.opends.sdk.ByteStringBuilder;
import org.opends.sdk.DecodeException;
import org.opends.sdk.ResultCode;
import org.opends.sdk.asn1.ASN1;
import org.opends.sdk.asn1.ASN1Reader;
import org.opends.sdk.asn1.ASN1Writer;
import org.opends.sdk.requests.AbstractExtendedRequest;
import org.opends.sdk.responses.Responses;
import org.opends.sdk.responses.Result;
 
import com.sun.opends.sdk.util.Message;
import com.sun.opends.sdk.util.StaticUtils;
 
 
 
/**
 * Created by IntelliJ IDEA. User: boli Date: Jun 23, 2009 Time:
 * 12:10:59 PM To change this template use File | Settings | File
 * Templates.
 */
public final class GetSymmetricKeyRequest extends
    AbstractExtendedRequest<GetSymmetricKeyRequest, Result>
{
  /**
   * The request OID for the get symmetric key extended operation.
   */
  static final String OID_GET_SYMMETRIC_KEY_EXTENDED_OP = "1.3.6.1.4.1.26027.1.6.3";
 
  private String requestSymmetricKey = null;
 
  private String instanceKeyID = null;
 
 
 
  public GetSymmetricKeyRequest()
  {
  }
 
 
 
  /**
   * {@inheritDoc}
   */
  public String getRequestName()
  {
    return OID_GET_SYMMETRIC_KEY_EXTENDED_OP;
  }
 
 
 
  public Operation getExtendedOperation()
  {
    return OPERATION;
  }
 
 
 
  public String getInstanceKeyID()
  {
    return instanceKeyID;
  }
 
 
 
  public String getRequestSymmetricKey()
  {
    return requestSymmetricKey;
  }
 
 
 
  public ByteString getRequestValue()
  {
    ByteStringBuilder buffer = new ByteStringBuilder();
    ASN1Writer writer = ASN1.getWriter(buffer);
 
    try
    {
      writer.writeStartSequence();
      if (requestSymmetricKey != null)
      {
        writer.writeOctetString(TYPE_SYMMETRIC_KEY_ELEMENT,
            requestSymmetricKey);
      }
      if (instanceKeyID != null)
      {
        writer.writeOctetString(TYPE_INSTANCE_KEY_ID_ELEMENT,
            instanceKeyID);
      }
      writer.writeEndSequence();
    }
    catch (IOException ioe)
    {
      // This should never happen unless there is a bug somewhere.
      throw new RuntimeException(ioe);
    }
 
    return buffer.toByteString();
  }
 
 
 
  public GetSymmetricKeyRequest setInstanceKeyID(String instanceKeyID)
  {
    this.instanceKeyID = instanceKeyID;
    return this;
  }
 
 
 
  public GetSymmetricKeyRequest setRequestSymmetricKey(
      String requestSymmetricKey)
  {
    this.requestSymmetricKey = requestSymmetricKey;
    return this;
  }
 
 
 
  public StringBuilder toString(StringBuilder builder)
  {
    builder.append("GetSymmetricKeyExtendedRequest(requestName=");
    builder.append(getRequestName());
    builder.append(", requestSymmetricKey=");
    builder.append(requestSymmetricKey);
    builder.append(", instanceKeyID=");
    builder.append(instanceKeyID);
    builder.append(", controls=");
    builder.append(getControls());
    builder.append(")");
    return builder;
  }
 
 
 
  /**
   * The BER type value for the symmetric key element of the operation
   * value.
   */
  private static final byte TYPE_SYMMETRIC_KEY_ELEMENT = (byte) 0x80;
 
  /**
   * The BER type value for the instance key ID element of the operation
   * value.
   */
  private static final byte TYPE_INSTANCE_KEY_ID_ELEMENT = (byte) 0x81;
 
 
 
  private static final class Operation implements
      ExtendedOperation<GetSymmetricKeyRequest, Result>
  {
 
    public GetSymmetricKeyRequest decodeRequest(String requestName,
        ByteString requestValue) throws DecodeException
    {
      if (requestValue == null)
      {
        // The request must always have a value.
        Message message = ERR_GET_SYMMETRIC_KEY_NO_VALUE.get();
        throw DecodeException.error(message);
      }
 
      String requestSymmetricKey = null;
      String instanceKeyID = null;
 
      try
      {
        ASN1Reader reader = ASN1.getReader(requestValue);
        reader.readStartSequence();
        if (reader.hasNextElement()
            && (reader.peekType() == TYPE_SYMMETRIC_KEY_ELEMENT))
        {
          requestSymmetricKey = reader.readOctetStringAsString();
        }
        if (reader.hasNextElement()
            && (reader.peekType() == TYPE_INSTANCE_KEY_ID_ELEMENT))
        {
          instanceKeyID = reader.readOctetStringAsString();
        }
        reader.readEndSequence();
        return new GetSymmetricKeyRequest().setRequestSymmetricKey(
            requestSymmetricKey).setInstanceKeyID(instanceKeyID);
      }
      catch (IOException ae)
      {
        StaticUtils.DEBUG_LOG.throwing(
            "GetSymmetricKeyRequest.Operation", "decodeRequest", ae);
 
        Message message = ERR_GET_SYMMETRIC_KEY_ASN1_DECODE_EXCEPTION
            .get(ae.getMessage());
        throw DecodeException.error(message, ae);
      }
    }
 
 
 
    public Result decodeResponse(ResultCode resultCode,
        String matchedDN, String diagnosticMessage)
    {
      return Responses.newResult(resultCode).setMatchedDN(matchedDN)
          .setDiagnosticMessage(diagnosticMessage);
    }
 
 
 
    public Result decodeResponse(ResultCode resultCode,
        String matchedDN, String diagnosticMessage,
        String responseName, ByteString responseValue)
        throws DecodeException
    {
      // TODO: Should we check to make sure OID and value is null?
      return Responses.newResult(resultCode).setMatchedDN(matchedDN)
          .setDiagnosticMessage(diagnosticMessage);
    }
  }
 
 
 
  // Singleton instance.
  private static final Operation OPERATION = new Operation();
}