// 
// Decompiled by Procyon v0.6.0
// 

package com.nimbusds.jose.crypto.impl;

import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.JWEHeader;
import java.util.Iterator;
import com.nimbusds.jose.Header;
import java.util.Collections;
import java.util.Set;

public class CriticalHeaderParamsDeferral
{
    private Set<String> deferredParams;
    
    public CriticalHeaderParamsDeferral() {
        this.deferredParams = Collections.emptySet();
    }
    
    public Set<String> getProcessedCriticalHeaderParams() {
        return Collections.singleton("b64");
    }
    
    public Set<String> getDeferredCriticalHeaderParams() {
        return Collections.unmodifiableSet((Set<? extends String>)this.deferredParams);
    }
    
    public void setDeferredCriticalHeaderParams(final Set<String> defCritHeaders) {
        if (defCritHeaders == null) {
            this.deferredParams = Collections.emptySet();
        }
        else {
            this.deferredParams = defCritHeaders;
        }
    }
    
    public boolean headerPasses(final Header header) {
        if (header.getCriticalParams() == null) {
            return true;
        }
        for (final String critParam : header.getCriticalParams()) {
            if (this.getProcessedCriticalHeaderParams().contains(critParam)) {
                continue;
            }
            if (this.getDeferredCriticalHeaderParams().contains(critParam)) {
                continue;
            }
            return false;
        }
        return true;
    }
    
    public void ensureHeaderPasses(final JWEHeader header) throws JOSEException {
        if (!this.headerPasses(header)) {
            throw new JOSEException("Unsupported critical header parameter(s)");
        }
    }
}
