flowguard

Configuration

Annotations

Mark specific classes and methods for special treatment.

A few protections need you to mark your own code directly, rather than being controlled purely by project-wide settings. These markers live under the pbco package and have no effect on how your program runs — flowguard reads them and removes them from the output.

String protection overrides

Put one of these on a method or class to override the project-wide string protection level just for it:

AnnotationEffect
@pbco.strings.StringsStandardAlways decrypt on every use, regardless of the project setting.
@pbco.strings.StringsCachedAlways decrypt once and reuse, regardless of the project setting.
@pbco.strings.StringsNativeUse native string protection if it's turned on; otherwise behaves like Standard.

Class sealing

Encrypt.java
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface Encrypt {
    boolean hidden() default false;
}

Put @pbco.authengine.Encrypt on a class to have flowguard seal it — see Class sealing for the full setup. Set hidden = true only if nothing else in your code refers to that class by name.

Native protection

Native.java
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Native {}

Put @pbco.nativeh.Native on a method or class to have it compiled to native code — see Native protection for the rules it needs to follow.

Reserved names

Flowguard also generates its own internal marker, pbco.vm.Virtualize, as part of native protection. Don't write this one yourself — use @pbco.nativeh.Native instead, and flowguard handles the rest.