blob: e9965cf94cbb666a1c15702f6dca35ebe86337a3 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.kerby.kerberos.kerb.codec;
import org.apache.kerby.asn1.Asn1;
import org.apache.kerby.cms.type.ContentInfo;
import org.apache.kerby.kerberos.kerb.type.base.EncryptionType;
import org.apache.kerby.kerberos.kerb.type.base.KrbMessageType;
import org.apache.kerby.kerberos.kerb.type.base.NameType;
import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
import org.apache.kerby.kerberos.kerb.type.kdc.AsReq;
import org.apache.kerby.kerberos.kerb.type.kdc.KdcReqBody;
import org.apache.kerby.kerberos.kerb.type.pa.PaData;
import org.apache.kerby.kerberos.kerb.type.pa.PaDataEntry;
import org.apache.kerby.kerberos.kerb.type.pa.PaDataType;
import org.apache.kerby.kerberos.kerb.type.pa.pkinit.PaPkAsReq;
import org.junit.Test;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.text.ParseException;
import java.util.Arrays;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class TestPkinitAnonymousAsReqCodec {
@Test
public void test() throws IOException, ParseException {
byte[] bytes = CodecTestUtil.readDataFile("/pkinit_anonymous_asreq.token");
// Asn1.dump(bytes, true);
ByteBuffer asReqToken = ByteBuffer.wrap(bytes);
AsReq asReq = new AsReq();
asReq.decode(asReqToken);
// Asn1.dump(asReq, false);
assertThat(asReq.getPvno()).isEqualTo(5);
assertThat(asReq.getMsgType()).isEqualTo(KrbMessageType.AS_REQ);
PaData paData = asReq.getPaData();
PaDataEntry paFxCookieEntry = paData.findEntry(PaDataType.FX_COOKIE);
assertThat(paFxCookieEntry.getPaDataType()).isEqualTo(PaDataType.FX_COOKIE);
assertThat(paFxCookieEntry.getPaDataValue()).isEqualTo(Arrays.copyOfRange(bytes, 38, 41));
PaDataEntry pkAsReqEntry = paData.findEntry(PaDataType.PK_AS_REQ);
assertThat(pkAsReqEntry.getPaDataType()).isEqualTo(PaDataType.PK_AS_REQ);
assertThat(pkAsReqEntry.getPaDataValue()).isEqualTo(Arrays.copyOfRange(bytes, 58, 1366));
PaPkAsReq paPkAsReq = new PaPkAsReq();
paPkAsReq.decode(pkAsReqEntry.getPaDataValue());
ContentInfo contentInfo = new ContentInfo();
Asn1.dump(paPkAsReq.getSignedAuthPack(), true);
contentInfo.decode(paPkAsReq.getSignedAuthPack());
assertThat(contentInfo.getContentType().getValue()).isEqualTo("1.2.840.113549.1.7.2");
Asn1.dump(contentInfo);
//Failed
// SignedData signedData = contentInfo.getContentAs(SignedData.class);
// assertThat(signedData.getCertificates()).isNull();
// assertThat(signedData.getEncapContentInfo().getContentType()).isEqualTo("1.3.6.1.5.2.3.1");
PaDataEntry encpaEntry = paData.findEntry(PaDataType.ENCPADATA_REQ_ENC_PA_REP);
assertThat(encpaEntry.getPaDataType()).isEqualTo(PaDataType.ENCPADATA_REQ_ENC_PA_REP);
assertThat(encpaEntry.getPaDataValue()).isEqualTo(Arrays.copyOfRange(bytes, 1376, 1376));
KdcReqBody body = asReq.getReqBody();
assertThat(body.getKdcOptions().getPadding()).isEqualTo(0);
assertThat(body.getKdcOptions().getValue()).isEqualTo(Arrays.copyOfRange(bytes, 1389, 1393));
PrincipalName cName = body.getCname();
assertThat(cName.getNameType()).isEqualTo(NameType.NT_UNKNOWN);
assertThat(cName.getName()).isEqualTo("WELLKNOWN/ANONYMOUS");
assertThat(body.getRealm()).isEqualTo("EXAMPLE.COM");
PrincipalName sName = body.getSname();
assertThat(sName.getNameType()).isEqualTo(NameType.NT_SRV_INST);
assertThat(sName.getNameStrings()).hasSize(2)
.contains("krbtgt", "EXAMPLE.COM");
assertThat(body.getNonce()).isEqualTo(1797404543);
List<EncryptionType> types = body.getEtypes();
assertThat(types).hasSize(6);
assertThat(types.get(0).getValue()).isEqualTo(0x0012);
assertThat(types.get(1).getValue()).isEqualTo(0x0011);
assertThat(types.get(2).getValue()).isEqualTo(0x0010);
assertThat(types.get(3).getValue()).isEqualTo(0x0017);
assertThat(types.get(4).getValue()).isEqualTo(0x0019);
assertThat(types.get(5).getValue()).isEqualTo(0x001A);
}
}