001/* 002 * acme4j - Java ACME client 003 * 004 * Copyright (C) 2016 Richard "Shred" Körber 005 * http://acme4j.shredzone.org 006 * 007 * Licensed under the Apache License, Version 2.0 (the "License"); 008 * you may not use this file except in compliance with the License. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 013 */ 014package org.shredzone.acme4j; 015 016import java.util.Arrays; 017 018/** 019 * An enumeration of revocation reasons. 020 * 021 * @see <a href="https://tools.ietf.org/html/rfc5280#section-5.3.1">RFC 5280 Section 022 * 5.3.1</a> 023 */ 024public enum RevocationReason { 025 026 UNSPECIFIED(0), 027 KEY_COMPROMISE(1), 028 CA_COMPROMISE(2), 029 AFFILIATION_CHANGED(3), 030 SUPERSEDED(4), 031 CESSATION_OF_OPERATION(5), 032 CERTIFICATE_HOLD(6), 033 REMOVE_FROM_CRL(8), 034 PRIVILEGE_WITHDRAWN(9), 035 AA_COMPROMISE(10); 036 037 private final int reasonCode; 038 039 RevocationReason(int reasonCode) { 040 this.reasonCode = reasonCode; 041 } 042 043 /** 044 * Returns the reason code as defined in RFC 5280. 045 */ 046 public int getReasonCode() { 047 return reasonCode; 048 } 049 050 /** 051 * Returns the {@link RevocationReason} that matches the reason code. 052 * 053 * @param reasonCode 054 * Reason code as defined in RFC 5280 055 * @return Matching {@link RevocationReason} 056 * @throws IllegalArgumentException if the reason code is unknown or invalid 057 */ 058 public static RevocationReason code(int reasonCode) { 059 return Arrays.stream(values()) 060 .filter(rr -> rr.reasonCode == reasonCode) 061 .findFirst() 062 .orElseThrow(() -> new IllegalArgumentException("Unknown revocation reason code: " + reasonCode)); 063 } 064 065}